Найти - Пользователи
Полная версия: Вечный error с русскими значениями
Начало » Python для новичков » Вечный error с русскими значениями
1 2
sonniy
раньше помогало “import codecs” теперь нет ;(
как только доходит до русской буквы сразу обрубает …
Ferroman
Что, поискать по форуму по поводу кодировок не судьба?
expee
весь форум в вопросах о кодировке. может хотя бы напишешь исходник?
sonniy
import urllib
f = urllib.urlopen("http://hotline.ua/“)
s = f.read()
print s
f.close()


вот для начала хотя бы спарсерить код …

если (”http://hotline.ua/“) поменять на (”http://python.org/") то все работает …
sonniy
Ferroman
Что, поискать по форуму по поводу кодировок не судьба?
если бы мне ДАЖЕ с тем что на форуме(в теме http://python.su/forum/viewtopic.php?pid=9144#p9144) не выдавало :


Traceback (most recent call last):
File “C:\Python26\Lib\SITE-P~1\PYTHON~1\pywin\framework\scriptutils.py”, line 312, in RunScript
exec codeObject in __main__.__dict__
File “C:\parser\proba 111111\teranian.py”, line 5, in <module>
print s
File “C:\Python26\lib\codecs.py”, line 351, in write
data, consumed = self.encode(object, self.errors)
File “C:\Python26\lib\encodings\cp866.py”, line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd6 in position 143: ordinal not in range(128)

при том, что как в ТОПИКЕ написано, поменял код на :

# -*- coding: cp1251 -*-

import codecs, sys
import urllib


outf = codecs.getwriter('cp1251')(sys.stdout, errors='replace')
sys.stdout = outf


f = urllib.urlopen("http://hotline.ua/")
s = f.read()
print s
f.close()
expee
У меня вообще код, который ты привел в посте #4 работает (всмысле ошибки не выдает, но вместо русского текста не то, что надо). Обычно в http-заголовках передается кодировка. Ты можешь вытащить ее оттуда и с помощью .decode('то что ты нашел в заголовках').encode('utf-8') получить строку в utf-8. Ну или используй chardet для определения кодировки.
sonniy
expee
У меня вообще код, который ты привел в посте #4 работает (всмысле ошибки не выдает, но вместо русского текста не то, что надо). Обычно в http-заголовках передается кодировка. Ты можешь вытащить ее оттуда и с помощью .decode('то что ты нашел в заголовках').encode('utf-8') получить строку в utf-8. Ну или используй chardet для определения кодировки.
собственно проблему решил следующим образом (правда не так как советовали ):
import urllib



f = urllib.urlopen("http://hotline.ua/")
s = f.read()
print s.decode("cp1251")
f.close()
expee
Да, но неизвестно, в какой кодировке сервер отдаст тебе страницу (если только не планируешь работать только с этим сайтом). Так что лучше смотреть кодировку в заголовке, а не указывать явно.
sonniy
expee
Да, но неизвестно, в какой кодировке сервер отдаст тебе страницу (если только не планируешь работать только с этим сайтом). Так что лучше смотреть кодировку в заголовке, а не указывать явно.
1.данный код проверил , работает нормально выдает в том виде котором надо и без крякозябрр (знаков вопросов или квадратиков заместь буковак)
2.насамом деле планирую работать с схожими сайтами такойже структуризации и кодировки

З.Ы.
expee
Ну или используй chardet для определения кодировки.
не понял как ето зделать
пользуюсь вот этой книгой (ненашол ни чего на тему chardet) или я не понял предложения =) :
http://0day.kiev.ua/modules.php?name=News&file=view&news_id=57314&search=python
expee
sonniy
не понял как ето зделать
http://chardet.feedparser.org/ там примеры есть. но в твоем случае, думаю, можно обойтись и без нее. просто, может на будущее пригодится (у меня была проблема, где сервер не всегда отдавал кодировку, а контент был на разных языках (не только рус.))

Я не сомневаюсь, что у тебя с этим сайтом оно работает, но если планируешь работать с другими, то они могут отдавать тебе страницу в utf-8, koi8-r, а не только в windows-1251. А вообще кодировку можно узнать, как я уже писал выше, из заголовка Content-Type (в твоем случае - f.headers).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB