Чтение текстового файла в юникоде с URL? - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь использовать urllib и urllib2 для чтения из текстового файла, в котором есть французские символы, такие как «é», «à» и так далее.

def load(url):
     from urllib2 import Request, urlopen, URLError, HTTPError

     req = Request(url)

     f = urlopen(req)
     f.readline()

     for line in f:
          line = line.split('\t')
          word = line[0].encode('utf-8')

У меня такое ощущение, что метод read () возвращает мне байтовую строку, поэтому я использую кодирование ('utf-8'), чтобы получить значение Unicode, но это дает мне следующую ошибку

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 6: ordinal not in range(128)

Может кто-нибудь сказать мне, что происходит? Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Да, вы читаете байты из файла.Что вы должны сделать, это декодировать , а не кодировать , строку байтов в Unicode.Понимаете, он уже закодирован .Если это не так, вам не нужно ничего с этим делать.

word = unicode(line[0], "utf8")

Вы должны указать кодировку , используемую в файле. Если это не utf8,другим хорошим подозреваемым может быть latin1.Или, вы знаете, поскольку это веб-документ, вы можете извлечь кодировку документа из заголовков и / или его содержимого, но это немного выходит за рамки вашего вопроса.

0 голосов
/ 09 февраля 2012

поместите код внизу вверху.

# coding: utf-8

на самом деле поддержка юникода не легка для питона.также рекомендуем эту статью.

http://www.python.org/dev/peps/pep-0263

http://groups.google.com/group/python-excel/browse_thread/thread/100ec019d3a2a1a9

...