【发布时间】:2021-10-03 21:30:16
【问题描述】:
我有一个扩展名为 .brt 的十六进制文件,其十六进制值在 00 - FF 范围内。 我想在命令提示符下解析文件并逐字节打印。
我尝试了以下代码行:
file = open("file.brt", encoding='utf-8')
data = file.read()
这给了我错误:
Exception has occurred: UnicodeDecodeError
'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
我了解错误是因为该值超过 128。然后我尝试使用 utf-16,这给出了一些随机值。 然后我尝试了以下代码行:
file = open("file.brt", encoding='ANSI')
data = file.read()
for line in data:
for char in line:
print(char.encode('utf-8').hex())
上面的代码正在解析数据,但如果十六进制值大于128,则打印一些随机值。例如,如果十六进制值为FF,则打印c3bf
【问题讨论】:
-
encoding='utf-8表示您期望文件中有 字符(UTF-8 编码)。这合适吗? .brt 文件的来源是什么?它可能是二进制格式,所以你应该open以二进制模式('b'),见docs。 -
什么叫十六进制文件?您可以使用文本编辑器(notepad、notepad++、vi 等)打开它并查看十六进制代码,还是必须使用二进制编辑器打开它才能查看 原始字节的十六进制代码?
标签: python python-3.x codec utf cp1252