我正在使用python 2.6.5 我想写一些日文字符到一个文件。 我收到了这个错误&我不知道如何更改编码。
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
>>> s = u'\u5E73\u621015'
>>> with open("yop", "wb") as f:
... f.write( s + "\n" );
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:
ordinal not in range(128)
>>> type( s )
<type 'unicode'>
答案 0 :(得分:80)
你将不得不'编码'unicode字符串。
s = u'\u5E73\u621015'
with open("yop", "wb") as f:
f.write(s.encode("UTF-8"))
尝试一下友情地看看unicode和python:http://farmdev.com/talks/unicode/
答案 1 :(得分:72)
作为替代方案,您可以使用codecs
模块:
import codecs
s = u'\u5E73\u621015'
with codecs.open("yop", "w", encoding="utf-8") as f:
f.write(s)
答案 2 :(得分:10)
2.6中的codecs.open()函数与python3.x中的内置open()函数非常相似(这是有道理的,因为Py3k字符串总是 Unicode)。为了将来验证您的代码,以防它在Py3k下使用,您可以执行以下操作。
import sys
if sys.version_info[0] < 3:
import codecs
_open_func_bak = open # Make a back up, just in case
open = codecs.open
with open('myfile', 'w', encoding='utf-8') as f:
f.write(u'\u5E73\u621015')
现在你的代码应该在2.x和3.3 +中都一样。
答案 3 :(得分:3)
在我的脚本开头插入它往往会解决unicode问题。
import sys
reload(sys)
sys.setdefaultencoding('utf8')