如何将unicode字符串写入文件? [复制]

Posted

技术标签:

【中文标题】如何将unicode字符串写入文件? [复制]【英文标题】:How to write unicode strings into a file? [duplicate] 【发布时间】:2011-07-25 21:37:45 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您将不得不对 unicode 字符串进行“编码”。

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

尝试一下,对 unicode 和 python 有一个友好的了解:http://farmdev.com/talks/unicode/

【讨论】:

有没有办法在文本文件中写入真正的 unicode 字符,如丹麦语?我的意思是我不希望它在文件中看起来像这样“\u5E73”。我希望它看起来像文件中的真实角色。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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+ 中应该都能正常工作。

【讨论】:

【参考方案4】:

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

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

【讨论】:

我很惊讶这不是公认的答案。很简单,确实解决了 unicode 问题 @HomunculusReticulli:(1)一般来说这是一个糟糕的建议(2)它没有回答问题:“如何将 unicode 字符串写入文件?” 这只是 Python 2 吗?是否有 Python 3.x 等价物?

以上是关于如何将unicode字符串写入文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 CodeGear C++ Builder 2009 将 unicode 字符串写入文件

将 unicode 字符/字符串写入文件

将unicode字符/字符串写入文件

如何使用 BeautifulSoup 将 UTF-8 编码的 HTML 正确解析为 Unicode 字符串? [复制]

如何在 R Windows 中将 Unicode 字符串写入文本文件?

如何将波兰字符从 JSON 文件写入 JSON 文件? [复制]