使用Python将Unicode写入文件

时间:2014-02-10 11:39:19

标签: python unicode utf-8 terminal locale

我的问题是,我可以将Unicode字符输出到终端,但不能输入文件。示范:

user@ubuntu:~$ python -c 'print u"\u5000"'
倀
user@ubuntu:~$ 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)

“locale”的输出:

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

2 个答案:

答案 0 :(得分:3)

因为您的终端设置为使用UTF-8,所以Python知道如何在直接写入终端时对Unicode字符进行编码。但是,在写入文件时,没有指定编码,因此Python默认为ASCII。要写入该文件,您需要显式指定字节编码。

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

答案 1 :(得分:1)

问题实际上是Python。解决方案是设置PYTHONIOENCODING = utf_8。