Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 1, 2009 11:19:23

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Юникодные дела....

Пишу простую програмку которая парсит сайт, выдерает из него 5 слов(они на сайте в CP1251) из строки и делает дальнейший запрос на системный урл, в параметре(_GET) которого передаются эти слова.

Проблема в том что пробую исполнить код пошагово в консоли, и он работает )))
МОжет чего то непонимаю совсем???
Возможно ли без конверта(вследствии хардкод получается (( ) кодировки выполнить regexp, ибо например без unicode(var,'cp1251') неработает re.findall ((
Сейчас при исполнении код выдаёт ошибку:
'ascii' codec can't encode characters in position 38-48: ordinal not in range(128)

забыл сказать что программа на wx питоне используя PythonCard….
Скорее всего проблема где то в нём…

Вот кусок кода:

# -*- coding: utf-8 -*-
TEXT_URL = u"http://mysys.url/?str=\"%s\""
.....
get = "http://" + domain
r = re.compile(u"(([йцукенгшщзхъёэждлорпавыфячсмитьбю-]{2,}\s){4})",re.UNICODE)

try:
handle = urllib.urlopen(get)
content = handle.read()
content = unicode(content,'cp1251')
result = r.findall(content)
if len(result)>0:
###############YA################
w_str = result[0][0]
href = TEXT_URL % w_str
print href.encode("cp1251") # или urllib.urlopen(href) выдаёт туже ошибку



Отредактировано (Апрель 1, 2009 12:28:53)

Офлайн

#2 Апрель 1, 2009 13:31:59

qwer
От:
Зарегистрирован: 2009-03-30
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Юникодные дела....

а кодировка stdout точно CP1251 ?

попробуйте так :

import sys
print href.encode(sys.stdout.encoding, 'ignore')
еще можно сделать квотирование URL :
href = TEXT_URL % urllib.quote(w_str.encode('utf8'))



Офлайн

#3 Апрель 1, 2009 13:34:52

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Юникодные дела....

Разобрался, вопрос закрыт.
Сам тупил )

Рабочий код:

# -*- coding: utf-8 -*-
TEXT_URL = "http://mysys.url/?str=\"%s\""
.....
get = "http://" + domain
r = re.compile("(([йцукенгшщзхъёэждлорпавыфячсмитьбю-]{2,}\s){4})")

try:
handle = urllib.urlopen(get)
content = handle.read()
content = content = content.decode("cp1251").encode("utf8")
result = r.findall(content)
if len(result)>0:
###############YA################
w_str = result[0][0]
href = TEXT_URL % w_str



Офлайн

#4 Апрель 1, 2009 13:56:38

qwer
От:
Зарегистрирован: 2009-03-30
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Юникодные дела....

а как RE узнает в какой кодировке входной текст ?
искать и обрабатывать лучше в Unicode, только конечный результат преобразовать в UTF8/CP1251 т.д.



Офлайн

#5 Апрель 1, 2009 14:11:10

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Юникодные дела....

Узнаёт я так понимаю по моей локали.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version