如何确定一个CSV文件的编码?

问题描述 投票:0回答:1

我写的脚本,有权对CSV文件中的一些操作,但是我不知道,如果文件将使用UTF-8或UTF-16进行编码。如何检查是否给定的CSV文件包含UTF-16 BOM?

python encoding utf-8 utf-16 byte-order-mark
1个回答
1
投票

注:一般情况下,识别的文本文件的原始编码不确定性问题。如果没有元数据(例如,一个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导致伪标准“UTF-8 BOM”。如果BOM存在,它占据了前三个字节的文件:

  • EF BB BF→UTF-8与BOM

如果你的文件不同的东西开始,那么或者BOM少UTF-8,或某些非UTF编码(ASCII,Latin-1的...)。

© www.soinside.com 2019 - 2024. All rights reserved.