繁体   English   中英

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

[英]Detect Byte Order Mark (BOM) in Python

我发现很多帖子描述了如何解析/忽略 BOM,但找不到任何关于如何简单地 output 判断文件是否包含 BOM 的真/假。 谁能指出我在 Python 中执行此操作的正确方向?

简单的答案是:读取前 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM