如何将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')