UTF8 Python BOM

Ant*_*mba 2 python unicode byte-order-mark utf-8

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

我有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()
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 8

fileObj = codecs.open(filename,"w",'utf-8')
Run Code Online (Sandbox Code Playgroud)

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

fileObj.write(codecs.BOM_UTF8)
Run Code Online (Sandbox Code Playgroud)

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

建议将BOM写为Unicode字符:

fileObj.write(u'\uFEFF')
Run Code Online (Sandbox Code Playgroud)

InternetSeriousBusiness写道:

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

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