Python 用于从BOM中发现编码的函数

Python 用于从BOM中发现编码的函数,python,character-encoding,byte-order-mark,Python,Character Encoding,Byte Order Mark,我想知道python库是否有一个函数,通过查找BOM表的存在来返回文件的字符编码 我已经实现了一些东西,但我只是担心我可能会重新发明轮子 更新:(基于John Machin的更正): 您的代码有一个微妙的bug,您可能永远不会被它咬到,但最好避免它 您正在迭代字典的键。Python不能保证迭代的顺序。在这种情况下,顺序很重要 codecs.BOM_UTF32_LE is '\xff\xfe\x00\x00' codecs.BOM_UTF16_LE is '\xff\xfe' 如果您的文件是用U

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

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

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


您的代码有一个微妙的bug,您可能永远不会被它咬到,但最好避免它

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

codecs.BOM_UTF32_LE is '\xff\xfe\x00\x00'
codecs.BOM_UTF16_LE is '\xff\xfe'
如果您的文件是用UTF-32LE编码的,而UTF-16LE恰好是先测试的,那么您将错误地声明该文件是用UTF-16LE编码的


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

我不知道您的问题的答案,但如果您最终使用了代码,则应该为没有BOM的文件设置默认值(并确保您已经阅读了BOM)。您是否查看过-看起来有人编写了一个库来做这类事情(可能更广泛),我认为chardet不会帮助您,根据。请注意,如果您想调用上面的函数,请考虑在函数之外移动<代码> Bufftotox编码< /Calp>映射。@ MaltInAi我宁愿不返回任何一个,这样我就知道我需要检查其他字符编码规则(比如CSS文件中的‘@字符集’UTF-8’’)。在这种情况下,我建议您在函数末尾添加一个
return
returnnone
,这样人们就不会认为这是一个疏忽。谢谢。。。我没有注意到BOM表以相同的值开始。
codecs.BOM_UTF32_LE is '\xff\xfe\x00\x00'
codecs.BOM_UTF16_LE is '\xff\xfe'