如何将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 字符串写入文件
如何使用 BeautifulSoup 将 UTF-8 编码的 HTML 正确解析为 Unicode 字符串? [复制]