我正在编写必须对 CSV 文件进行一些操作的脚本,但我不知道文件是否会使用 utf-8 或 utf-16 进行编码。如何检查给定的 csv 文件是否包含 utf-16 BOM?
最佳答案
注意:一般来说,识别文本文件的原始编码不是一个确定性问题。如果没有元数据(例如 HTML 内容类型 header ),您只能猜测。有一些工具和库可以帮助您猜测 - 其中一些做得非常好 - 但您不能 100% 确定。如果涉及 8 位编码(如 Latin-1、Windows CP1252 等),则尤其如此。
但是,如果您已经知道编码必须是 UTF-8 或 UTF-16,那么您的情况就很好。
UTF-16 编码的文本文件必须始终以 BOM 开头。 您可以使用这个事实来检测它的存在。 UTF-16 有两种不同的“风格”——大端 (BE) 和低端 (LE)。 由于 UTF-16 使用两字节字(16 位),因此有两种方式组成它们:高字节优先(BE)或低字节优先(LE)。 您可以从 BOM 看出,即。通过查看文件的前两个字节:
FE FF
→ UTF-16 BEFF FE
→ UTF-16 LE
对于 UTF-8,BOM 并不是严格需要的——事实上,使用它实际上是非标准的。 然而,许多 Windows 应用程序不断拒绝识别 UTF-8 编码,除非它包含 BOM,这一事实导致了伪标准“UTF-8 with BOM”。 如果 BOM 存在,则它占据文件的前三个字节:
EF BB BF
→ 带 BOM 的 UTF-8
如果您的文件以不同的内容开头,那么您要么使用无 BOM 的 UTF-8,要么使用某种非 UTF 编码(ASCII、Latin-1...)。
关于python - 如何确定 CSV 文件的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54636245/