2014-02-10 3 views
4

Моя проблема заключается в том, что я могу выводить символы Unicode в мой терминал, но не в файлы. Демонстрация:Запись Юникода в файл с помощью Python

[email protected]:~$ python -c 'print u"\u5000"' 
倀 
[email protected]:~$ python -c 'print u"\u5000"' >a.out 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5000' in position 0: ordinal not in range(128) 

Выход «локаль»:

LANG=en_US.UTF-8 
LANGUAGE=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL=en_US.UTF-8 

ответ

3

Поскольку ваш терминал настроен на использование UTF-8, Python умеет кодировать символ Unicode при записи непосредственно в терминал. Однако при записи в файл не указывается кодировка, поэтому Python по умолчанию имеет значение ASCII. Чтобы записать в файл, вам необходимо явно указать байтовую кодировку.

python -c 'print u"\u5000".encode("UTF-8")' >a.out 
1

Проблема была на самом деле с Python. В решении устанавливалось значение PYTHONIOENCODING = utf_8.

Смежные вопросы