Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 3, 2009 17:43:42

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

Проблема с кодировкой

Здравствуйте все! У меня питон 3.0.1.

Задача такая: есть файл. Из него надо прочитать символы как utf-8.

Написал такое:

def LoadFile():
f = io.open('myfile', 'r', 16384, 'utf8')
res = f.read()
f.close()
return res
Этот код “падает” на f.close()
c “UnicodeEncodeError: ‘charmap’ codec can't encode character ‘\u3826’ in position 568: character maps to <undefined>”
При том, что содержимое писалось точно в utf-8.

Как это забороть и получить-таки строку? Как вообще лучше парсить файл, в котором может быть несколько кодировок? По байтам? Можно пример для третьего питона: как извлечь b'345' из b'123456'?



Отредактировано (Июнь 3, 2009 17:46:52)

Офлайн

#2 Июнь 3, 2009 19:12:25

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Проблема с кодировкой

Что-то напутал. Примерчик рабочий, а вот myfile наверное все же не в utf8. И почему ‘charmap’ codec? Глянь f.encoding, должен быть ‘utf8’.

>>> b'123456'
b'456'

Но наверное на самом деле нужно что-то другое.

Как файл может быть одновременно в разных кодировках? Как определить, где какая?
Как-то все сумбурно…



Офлайн

#3 Июнь 4, 2009 10:57:48

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

Проблема с кодировкой

Ну да, это критерий новичка, когда он где-то увидел код, запихнул к себе, а у него не компилируется и он не знает, что с этим делать. Я пока в такой стадии с питоном. Поэтому сумбурно :-)

Я набросал пример, который иллюстрирует ситуацию более подробно:

import io
import urllib.request

def Page2File(URL, FileName):
f = io.open(FileName, 'wb')
f.write(urllib.request.urlopen(urllib.request.Request(URL)).read())
f.close()

def File2Bytes(FileName):
f = io.open('_tmp.tmp', 'rb')
try:
res = f.read()
f.close()
finally:
res = res
return res

# === Main ===============================================================
Page2File('http://otvety.google.ru/otvety/', '_tmp.tmp')
page = File2Bytes('_tmp.tmp')
page = page.decode('utf8')
print(page)
У меня лично валится на decode. В принципе, можно прямо из bytes выдирать utf-строки и декодировать только их (я пока не пробовал, но ошибок быть не должно).
Но, может, у меня сам подход неправильный? Поправьте, кто может.



Отредактировано (Июнь 4, 2009 14:57:42)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version