文件中不需要的十六进制值

Unwanted hex value in file

我创建了一个小 python3 脚本如下:

import sys

with open(sys.argv[1], 'r') as f:
    hex_data = f.readline().split()
    with open('hexConverted', 'a') as e:
        for i in hex_data:
            print("Writing {} in file".format(i))                        #for debugging
            e.write(chr(int(i, 16)))

读取格式如下的文件'f'

89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52

并创建一个新文件,其十六进制值与上面提供的十六进制值相同。但它每次都会在开头附加一个不需要的 \xC2

$ hexdump -C hexConverted
00000000  c2 89 50 4e 47 0d 0a 1a  0a 00 00 00 0d 49 48 44  |..PNG........IHD|
00000010  52                                                |R|
00000011

甚至调试 print 命令也没有提到这个十六进制值。为什么会这样?

为了澄清我的评论,您需要将 "b" 添加到 open,然后将一个字节对象传递给 write。如果你不这样做,它会尝试将文件编码为 un​​icode,而 c2 是一个特殊的 unicode 代码。

import sys

with open(sys.argv[1], 'r') as f:
    hex_data = f.readline().split()
    with open('hexConverted', 'ab') as e:
        for i in hex_data:
            print("Writing {} in file".format(i))
            e.write(int(i,16).to_bytes(1,'big'))