Существует множество тем по этой проблеме в Интернете, но я не могу найти ответ для моего конкретного случая.Python CSV-файл UTF-16 для UTF-8 Ошибка печати
У меня есть файл CSV. Я не уверен, что это было сделано для него, но когда я пытаюсь открыть его, я получаю:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
Вот полный Traceback
:
Traceback (most recent call last):
File "keywords.py", line 31, in <module>
main()
File "keywords.py", line 28, in main
get_csv(file_full_path)
File "keywords.py", line 19, in get_csv
for row in reader:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5a07' in position 10: ordinal not in range(128)
С помощью переполнения стека, я получил его открыть с:
reader = csv.reader(codecs.open(file_full_path, 'rU', 'UTF-16'), delimiter='\t', quotechar='"')
Теперь проблема заключается в том, что, когда я читаю файл:
def get_csv(file_full_path):
import csv, codecs
reader = csv.reader(codecs.open(file_full_path, 'rU', 'UTF-16'), delimiter='\t', quotechar='"')
for row in reader:
print row
я застревают на азиатских символов:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5a07' in position 10: ordinal not in range(128)
Я попытался decode
, «закодировать», unicode()
на строку, содержащую этот символ, но это не кажется помощь.
for row in reader:
#decoded_row = [element_s.decode('UTF-8') for element_s in row]
#print decoded_row
encoded_row = [element_s.encode('UTF-8') for element_s in row]
print encoded_row
На данный момент я не совсем понимаю, почему. Если я
>>> print u'\u5a07'
娇
или
>>> print '娇'
娇
это работает. Также в терминале он также работает. Я проверил по умолчанию кодировку на терминале и оболочку Python, это UTF-8 во всем мире. И он легко печатает этот символ. Я предполагаю, что это имеет какое-то отношение ко мне, открывая файл с codecs
с использованием UTF-16.
Я не уверен, куда идти отсюда. Может ли кто-нибудь помочь?
Пожалуйста, покажите нам * полный * след вашего исключения, а также соответствующий раздел кода. –
Вы также должны прочитать [Python Unicode HOWTO] (http://docs.python.org/2/howto/unicode.html), чтобы понять, когда и где Python может автоматически пытаться * кодировать * unicode. –
Из документации модуля 'csv': * Эта версия модуля csv не поддерживает ввод Unicode. Кроме того, в настоящее время существуют некоторые проблемы, связанные с символами NULL ASCII. Соответственно, все входные данные должны быть UTF-8 или ASCII для печати, чтобы быть в безопасности *. –