在Python中检测字节顺序标记(BOM)

2024-06-02 08:09:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我找到了很多描述如何解析/忽略BOM的帖子,但找不到任何关于如何简单地输出文件是否包含BOM的真/假。有人能告诉我用Python做这件事的正确方向吗


Tags: 文件bom帖子正确方向
1条回答
网友
1楼 · 发布于 2024-06-02 08:09:03

简单的答案是:读取前4个字节并查看它们

with open("utf32le.file", "rb") as file:
    beginning = file.read(4)
    # The order of these if-statements is important
    # otherwise UTF32 LE may be detected as UTF16 LE as well
    if beginning == b'\x00\x00\xfe\xff':
        print("UTF-32 BE")
    elif beginning == b'\xff\xfe\x00\x00':
        print("UTF-32 LE")
    elif beginning[0:3] == b'\xef\xbb\xbf':
        print("UTF-8")
    elif beginning[0:2] == b'\xff\xfe':
        print("UTF-16 LE")
    elif beginning[0:2] == b'\xfe\xff':
        print("UTF-16 BE")
    else:
        print("Unknown or no BOM")

不那么简单的答案是:

可能有些二进制文件似乎有BOM表,但它们仍然可能只是二进制文件,其中的数据意外地看起来像BOM表

除此之外,您通常也可以将没有BOM表的文本文件视为UTF-8

相关问题 更多 >