[英]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.