gpt4 book ai didi

python - 从BOM发现编码的函数

转载 作者:行者123 更新时间:2023-12-01 05:52:49 25 4
gpt4 key购买 nike

我想知道 python 库是否有一个函数可以通过查找 BOM 是否存在来返回文件的字符编码。

我已经实现了一些东西,但我只是担心我可能会重新发明轮子

更新:(基于 John Machin 的更正):

import codecs

def _get_encoding_from_bom(fd):
first_bytes = fd.read(4)
fd.seek(0)
bom_to_encoding = (
(codecs.BOM_UTF32_LE, 'utf-32'),
(codecs.BOM_UTF32_BE, 'utf-32'),
(codecs.BOM_UTF8, 'utf-8-sig'),
(codecs.BOM_UTF16_LE, 'utf-16'),
(codecs.BOM_UTF16_BE, 'utf-16'),
)
for bom, encoding in bom_to_encoding:
if first_bytes.startswith(bom):
return encoding
return None

最佳答案

您的代码有一个微妙的错误,您可能永远不会被它困扰,但最好避免它。

您正在迭代字典的键。 Python 不保证迭代的顺序。在这种情况下,顺序很重要。

codecs.BOM_UTF32_LE is '\xff\xfe\x00\x00'
codecs.BOM_UTF16_LE is '\xff\xfe'

如果您的文件采用 UTF-32LE 编码,但恰好先测试了 UTF-16LE,您将错误地指出该文件采用 UTF-16LE 编码。

为了避免这种情况,您可以迭代按 BOM 长度降序排序的元组。请参阅我对 this question 的回答中的示例代码。

关于python - 从BOM发现编码的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com