Форум сайта python.su
Всем добрый день. Перечитал всё что поиск выдал по запросу ‘unicode’ но верного решения не нашёл.
Итак, в первой строчке файла прописано # -*- coding:utf-8 -*-
Программа скачивает страницу, парсит её через xpath. Страница в кодировке utf-8. Получаю таким образом строку русскоязычную и хочу её вывести.
len строки 14
type строки <type ‘unicode’>
строка вообще представляет собой слово Курумоч
попытка вывести в консоль строку командой print выдаёт:
Traceback (most recent call last):
File "ut.py", line 175, in <module>
ut('','','','')
File "ut.py", line 168, in ut
ut_chain_lookup(data,x)
File "ut.py", line 86, in ut_chain_lookup
print n.text_content().strip()
File "C:\Python25\lib\encodings\cp866.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-13: ch
aracter maps to <undefined>
u'\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87'
Офлайн
читайте про encode/decode
коли ви отримуєте стрічку в змінну яка є юнікодною, вам необхідно декодувати з базового кодування - тобто з utf-8
при виводі вам необхідно зробити encode в кодування терміналу - cp866
Отредактировано (Окт. 14, 2009 15:07:52)
Офлайн
clopomorИзвините, мало что понял. Я перепробывал все возможные варианты encode/decode с utf-8 и cp866.
читайте про encode/decode
коли ви отримуэте стрычку в змынну яка э юныкодною, вам необхыдно декодувати з базового кодування - тобто з utf-8
при виводі вам необхідно зробити encode в кодування термыналу - cp866
Офлайн
Код покажите или нам продолжать в стеклянный шар смотреть?
Офлайн
Proshu prosheniya za translit…
Kod mojete ne pokazivat - u vas oshibka vilazit ne pri perekodirovanii iz utf-8, a pri otobrajenii v vindovoy console. Tam je napisano cp866…
Vi v fayl zapishite, i uvidite chto vse ok…
P.S. utf-8 toje bivaet razniy, naprimer v standartnoy biblioteke est takaya kodirovka kak utf_8_sig, poprobuyte esche i ee, ona chasto vstrechaetsya, u menya i u nekotorih znakomih bila podobnaya problema, chto vrode bi utf8, a vrode bi i net…
Отредактировано (Окт. 14, 2009 15:51:42)
Офлайн
diam123Значит у вас всё-таки хороший стеклянный шар? Нет.
Kod mojete ne pokazivat - u vas oshibka vilazit ne pri perekodirovanii iz utf-8, a pri otobrajenii v vindovoy console
alphavilleЭто не уникодные символы внутри, а utf-8. Надо увидеть код, чтобы понять почему так вышло.
u'\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87'
Офлайн
'\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87' не похоже на юникод, поэтому символ ‘u’ явно лишний :(
в win-консоли без всяких ошибок выводится ‘\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87’.decode(“utf-8”) и ‘\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87’.decode(“utf-8”).encode(“cp866”) тоже отображается без ошибок
Офлайн
DaevaornInogda podrabativayu telepatom )diam123Значит у вас всё-таки хороший стеклянный шар? Нет.
Kod mojete ne pokazivat - u vas oshibka vilazit ne pri perekodirovanii iz utf-8, a pri otobrajenii v vindovoy consolealphavilleЭто не уникодные символы внутри, а utf-8. Надо увидеть код, чтобы понять почему так вышло.
u'\xd0\x9a\xd1\x83\xd1\x80\xd1\x83\xd0\xbc\xd0\xbe\xd1\x87'
C:\Python25\lib\encodings\cp866.pyIshodya iz etogo pochemu-to kajetsya chto problema imenno pri vivode v konsol`
Офлайн
Привожу код:
# -*- coding:utf-8 -*-
import httplib, urllib
import lxml.html
host = 'www.yandex.ru'
headers = {'Host':host,
'User-agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'ru,en-us;q=0.7,en;q=0.3',
'Accept-Charset': 'windows-1251,utf-8;q=0.7,*;q=0.7',
'Keep-Alive': '300',
'Connection': 'keep-alive'}
conn = httplib.HTTPConnection(host)
conn.request('GET', '/',{},headers)
resp = conn.getresponse()
print resp.status
data = resp.read()
html = lxml.html.document_fromstring(data)
vakansii = html.xpath("id('foot')/table/tr/td[4]/a[3]")[0].text_content().strip()
print repr( vakansii )
Офлайн
U mnu netu lxml :(
Офлайн