3

可能重复:
在 python 中写入 utf-8 文件

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

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()
4

2 回答 2

8
fileObj = codecs.open(filename,"w",'utf-8')

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

fileObj.write(codecs.BOM_UTF8)

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

建议将 BOM 写为 Unicode 字符,而不是:

fileObj.write(u'\uFEFF')

InternetSeriousBusiness 写道:

无论如何,UTF-8 BOM 不是不鼓励吗?–

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

于 2012-08-30T09:47:57.320 回答
0

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

于 2012-08-29T14:36:46.060 回答