UTF8 Python BOM

时间:2012-08-29 14:32:59

标签: python unicode utf-8 byte-order-mark

  

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

我有Unicode字符串(带有日文字符)我想写入CSV文件。 但是,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()

2 个答案:

答案 0 :(得分:6)

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

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

fileObj.write(codecs.BOM_UTF8)

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

建议将BOM写为Unicode字符:

fileObj.write(u'\uFEFF')

InternetSeriousBusiness写道:

  

无论如何,不​​鼓励使用UTF-8 BOM吗? -

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

答案 1 :(得分:0)

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