如何将unicodestring写入文件?

我正在使用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'> 

你将不得不'编码'的Unicodestring。

 s = u'\u5E73\u621015' with open("yop", "wb") as f: f.write(s.encode("UTF-8")) 

试试看unicode和python有点友好: http : //farmdev.com/talks/unicode/

作为替代,您可以使用codecs模块:

 import codecs s = u'\u5E73\u621015' with codecs.open("yop", "w", encoding="utf-8") as f: f.write(s) 

2.6中的codecs.open()函数与python3.x中的内置open()函数非常相似(这是很有意义的,因为Py3kstring总是 Unicode)。 为了将来的validation你的代码,以防在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+中都是一样的。

在我的脚本的开始插入这往往解决unicode问题。

 import sys reload(sys) sys.setdefaultencoding('utf8')