繁体   English   中英

如何确定 CSV 文件的编码?

[英]How to determine the encoding of a CSV file?

我正在编写必须对 CSV 文件进行一些操作的脚本,但我不知道文件是否会使用 utf-8 或 utf-16 进行编码。 如何检查给定的 csv 文件是否包含 utf-16 BOM?

注意:通常,识别文本文件的原始编码不是确定性问题。 如果没有元数据(例如 HTML 内容类型标头),您只能猜测。 有一些工具和库可以帮助你猜测——其中一些做得很好——但你不能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 BE
  • FF FE → UTF-16 LE

对于 UTF-8,并不严格需要 BOM——事实上,使用它实际上是非标准的。 然而,许多 Windows 应用程序一直拒绝识别 UTF-8 编码,除非它包含 BOM,这一事实导致了伪标准“带有 BOM 的 UTF-8”。 如果 BOM 存在,它会占用文件的前三个字节

  • EF BB BF → 带有 BOM 的 UTF-8

如果您的文件以不同的开头,那么您要么使用无 BOM 的 UTF-8,要么使用一些非 UTF 编码(ASCII、Latin-1...)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM