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

问题描述

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

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

--- src
     |
     |
     |--- packages
     |--- .sln
     |--- Project1
             |
             |
             |--- nuget.config
             |--- packages.config

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

解决方法

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

>>> s = 'Straße'
>>> utf8_sig = s.encode('utf-8-sig')
>>> utf8 = s.encode('utf')
>>> print(utf8_sig.decode('utf-8-sig'))
Straße
>>> print(utf8.decode('utf-8-sig'))
Straße

从编解码器docs

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

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