Python 如何确定CSV文件的编码?
我正在编写脚本,该脚本必须对CSV文件进行一些操作,但我不知道该文件是用utf-8还是utf-16编码的。如何检查给定的csv文件是否包含utf-16 BOM?注意:一般来说,识别文本文件的原始编码不是一个确定的问题。如果没有元数据(例如HTML内容类型标题),您只能猜测。有一些工具和库可以帮助你猜测——其中一些做得很好——但你不能100%确定。如果涉及8位编码(如Latin-1、Windows CP1252等),则尤其如此 但是如果您已经知道编码必须是UTF-8或UTF-16,那么您的情况就很好了 UTF-16编码的文本文件必须始终以开头。 您可以使用此事实来检测它的存在。 UTF-16有两种不同的“口味”——大端(BE)和低端(LE)。 由于UTF-16使用双字节字(16位),所以有两种方法来组合它们:高字节优先(BE)或低字节优先(LE)。 您可以从BOM表中判断,即通过查看文件的前两个字节来判断:Python 如何确定CSV文件的编码?,python,encoding,utf-8,utf-16,byte-order-mark,Python,Encoding,Utf 8,Utf 16,Byte Order Mark,我正在编写脚本,该脚本必须对CSV文件进行一些操作,但我不知道该文件是用utf-8还是utf-16编码的。如何检查给定的csv文件是否包含utf-16 BOM?注意:一般来说,识别文本文件的原始编码不是一个确定的问题。如果没有元数据(例如HTML内容类型标题),您只能猜测。有一些工具和库可以帮助你猜测——其中一些做得很好——但你不能100%确定。如果涉及8位编码(如Latin-1、Windows CP1252等),则尤其如此 但是如果您已经知道编码必须是UTF-8或UTF-16,那么您的情况就很
→ UTF-16 BEFE FF
→ UTF-16LEFF FE
→ 带BOM的UTF-8EF BB BF
如果您的文件以不同的开头,那么您要么使用无BOM的UTF-8,要么使用一些非UTF编码(ASCII、拉丁语-1…。听起来可能不可能-请参阅UTF-16不太用于交换数据。尝试使用编辑器(或浏览器)并检查不同的编码:当您看到良好的数据时,可能是正确的编码。如果看到很多00字节,几乎可以肯定是UTF-16(或其他16位或更多位编码)。[一个csv文件需要有一个逗号,所以U+002C,所以在这种情况下,你必须有00字节]告诉发送者你只接受UTF-8(或其他)可能更简单。或者接受字符编码未与文件分离的文件格式,如.xlsx。