Python-使用BOM解码UTF-16文件
我和你有个档案。我想将这个文件转换成UTF-8,而不使用BOM,这样我就可以使用Python解析它了 我使用的常规代码没有做到这一点,它返回未知字符,而不是实际的文件内容Python-使用BOM解码UTF-16文件,python,file,encoding,utf-8,utf-16,Python,File,Encoding,Utf 8,Utf 16,我和你有个档案。我想将这个文件转换成UTF-8,而不使用BOM,这样我就可以使用Python解析它了 我使用的常规代码没有做到这一点,它返回未知字符,而不是实际的文件内容 f = open('dbo.chrRaces.Table.sql').read() f = str(f).decode('utf-16le', errors='ignore').encode('utf8') print f 解码此文件的正确方法是什么,这样我就可以用f.readlines()解析它?首先,您应该以二进制模式读
f = open('dbo.chrRaces.Table.sql').read()
f = str(f).decode('utf-16le', errors='ignore').encode('utf8')
print f
解码此文件的正确方法是什么,这样我就可以用
f.readlines()
解析它?首先,您应该以二进制模式读取,否则事情会变得混乱
然后,检查并删除BOM表,因为它是文件的一部分,而不是实际文本的一部分
import codecs
encoded_text = open('dbo.chrRaces.Table.sql', 'rb').read() #you should read in binary mode to get the BOM correctly
bom = codecs.BOM_UTF16_LE #print dir(codecs) for other encodings
assert encoded_text.startswith(bom) #make sure the encoding is what you expect, otherwise you'll get wrong data
encoded_text = encoded_text[len(bom):] #strip away the BOM
decoded_text = encoded_text.decode('utf-16le') #decode to unicode
在完成所有解析/处理之前,不要编码(到utf-8
或其他方式)。您应该使用unicode字符串完成所有这些操作
另外,
decode
上的errors='ignore'
可能是个坏主意。更糟糕的是:让你的程序告诉你一些错误,停止或返回错误的数据? < P>这在Python 3中工作:
f = open('test_utf16.txt', mode='r', encoding='utf-16').read()
print(f)
如果这是在Windows上,请尝试以二进制模式打开文件,看看是否有帮助。如果仅将编码设置为utf-16,则不必手动删除BOM表。编辑使其仅为
utf-16
,它似乎没有文档记录,但utf-16
的编码似乎会自动处理BOM表。如果您使用utf-16le
,它仍然可以工作,但BOM仍然存在,您可以通过使用字符串函数和编解码器将其删除。BOM\u UTF16\u BE