Форум сайта python.su
Пишу простую програмку которая парсит сайт, выдерает из него 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)
Офлайн
а кодировка stdout точно CP1251 ?
попробуйте так :
import sys
print href.encode(sys.stdout.encoding, 'ignore')
href = TEXT_URL % urllib.quote(w_str.encode('utf8'))
Офлайн
Разобрался, вопрос закрыт.
Сам тупил )
Рабочий код:
# -*- 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
Офлайн
а как RE узнает в какой кодировке входной текст ?
искать и обрабатывать лучше в Unicode, только конечный результат преобразовать в UTF8/CP1251 т.д.
Офлайн
Узнаёт я так понимаю по моей локали.
Офлайн