python - “utf-8-sig”是否适合解码 UTF-8 和 UTF-8 BOM?
问题描述
我正在使用 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)
我想确认一下,“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
从编解码器文档:
在将任何 Unicode 字符写入文件之前,会写入一个 UTF-8 编码的 BOM(看起来像这样的字节序列:0xef、0xbb、0xbf)……解码时 utf-8-sig 将跳过这三个如果它们作为文件中的前三个字节出现,则为字节。
Windows 环境中最常见的 utf-8-sig 编码。如果您在 mac 或 *nix 系统上与用户共享文件,标准的 utf-8 编码是他们希望收到的。
推荐阅读
- javascript - 如何选择性地将 css 应用于某些 js 脚本?
- ruby-on-rails - 参数错误;给出的参数数量错误
- react-native - 循环内的 AsyncStorage setItem
- python - def中的熊猫数据框
- javascript - 如何在javascript中的eval()中解决(a + b)-(r + s)
- macos - Minishift 无法在 macOS 中启动
- oracle - Oracle 中调用本地程序的限制?
- php - Laravel 数据表耗时过长
- javascript - 领域与电子兼容 - 反应?- 集成时出错
- c - 为什么我不能运行矩阵大小 1000*1000