“utf-8-sig”是否适合解码UTF-8和UTF-8 BOM?

Tyr*_*ion 4 python csv utf-8 character-encoding

我正在使用 Python CSV 库读取两个 CSV 文件。

一种是用UTF-8-BOM编码,另一种是用UTF-8编码。在我的实践中,我发现这两个文件都可以通过使用“utf-8-sig”作为编码类型来读取:

from csv import reader 
with open(file_path, encoding='utf-8-sig') as csv_file:
    c_reader = reader(csv_file, delimiter=',')
    headers = next(c_reader)    
    for row in c_reader:
        print(row)
Run Code Online (Sandbox Code Playgroud)

我想确认一下,“utf-8-sig”是否适合解码UTF-8和UTF-8 BOM?我使用的是 Python 3.6 和 3.7 版本。感谢您的回答!

sna*_*erb 5

utf-8-sig 编解码器将解码 utf-8-sig 编码的文本和使用标准 utf-8 编码编码的文本

\n
>>> s = \'Stra\xc3\x9fe\'\n>>> utf8_sig = s.encode(\'utf-8-sig\')\n>>> utf8 = s.encode(\'utf\')\n>>> print(utf8_sig.decode(\'utf-8-sig\'))\nStra\xc3\x9fe\n>>> print(utf8.decode(\'utf-8-sig\'))\nStra\xc3\x9fe\n
Run Code Online (Sandbox Code Playgroud)\n

来自编解码器文档

\n
\n

在将任何 Unicode 字符写入文件之前,会写入 UTF-8 编码的 BOM(字节序列看起来像这样:0xef、0xbb、0xbf)...在解码 utf-8-sig 时将跳过这三个字节(如果它们出现在文件中的前三个字节)。

\n
\n

utf-8-sig 编码在 Windows 环境中最常见。如果您与 mac 或 *nix 系统上的用户共享文件,则他们期望收到的是标准 utf-8 编码。

\n

  • 因此,让我们看看我是否可以总结您的建议:使用“utf-8-sig”读取所有 UTF-8 文件,使用“utf-8”写入大多数文件,并使用“utf-8-sig” '` 写入您知道将在 Windows 系统上独占打开的文件? (2认同)