如何将Unicode字符串写入文件?

57 投票
4 回答
79752 浏览
提问于 2025-04-16 14:42

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

4 个回答

12

在Python 2.6中,codecs.open()这个函数和Python 3.x中的内置open()函数非常相似(这也很合理,因为Python 3的字符串总是使用Unicode编码)。为了让你的代码在未来也能兼容Python 3,你可以这样做。

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')

这样一来,你的代码在Python 2.x和3.3以上的版本中都能正常工作。

76

作为一种替代方法,你可以使用 codecs 模块:

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

你需要对这个unicode字符串进行“编码”。

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

可以试试这个链接,里面有关于unicode和python的简单介绍:http://farmdev.com/talks/unicode/

撰写回答