首页
学习
活动
专区
圈层
工具
发布

UTF8 Python
EN

Stack Overflow用户
提问于 2012-08-29 14:32:58
回答 2查看 13.3K关注 0票数 3

可能重复: Write to utf-8 file in python

我有Unicode字符串(带有日语字符),我想写到CSV文件中。但是,BOM似乎写得不正确,就像第一行中的字符串""一样。这导致Excel无法正确显示日文字符。使用Notepad++打开CSV时,字符将正确显示。

代码语言:javascript
复制
fileObj = codecs.open(filename,"w",'utf-8')
fileObj.write(codecs.BOM_UTF8)
c = u';'
for s in stringsToWrite:
   line = e.someUnicodeString
   fileObj.write(line)
fileObj.close()
EN

回答 2

Stack Overflow用户

发布于 2012-08-30 09:47:57

代码语言:javascript
复制
fileObj = codecs.open(filename,"w",'utf-8')

好的,您有一个Unicode输出流。

代码语言:javascript
复制
fileObj.write(codecs.BOM_UTF8)

BOM_UTF8是一个字节序列,而不是您期望写入Unicode流的Unicode字符串。Python将使用某些编码自动从字节转换为Unicode,这可能不是正确的编码。如果默认编码是Windows代码页1252而不是UTF-8,那么您将有效地对BOM进行双重编码,并且它将作为的UTF-8编码。

建议将BOM改为Unicode字符:

代码语言:javascript
复制
fileObj.write(u'\uFEFF')

InternetSeriousBusiness写道:

UTF-8 BOM不气馁吗?-

是的,在大多数情况下,UTF-8的faux-BOM在很大程度上是一场灾难,但需要得到Excel的字符集猜测才能获得UTF-8。不幸的是,它在Excel中对Mac不起作用。另一种可能的办法可能是使用UTF-16。

票数 8
EN

Stack Overflow用户

发布于 2012-08-29 14:36:46

您复制的字符串是UTF-8 BOM。因此,您的问题不是在python代码中,而是在其他地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12180376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档