Python bytearray 忽略编码?
我有一段代码,它从一个字符串缓冲区(StringIO
对象)读取二进制数据,然后试图把这些数据转换成一个bytearray
对象。但是,当值大于127时,就会出现错误,因为ascii编码无法处理这样的值,即使我试图覆盖这个限制。
file = open(filename, 'r+b')
file.seek(offset)
chunk = file.read(length)
chunk = zlib.decompress(chunk)
chunk = StringIO(chunk)
d = bytearray(chunk.read(10), encoding="iso8859-1", errors="replace")
运行这段代码时,我得到了:
d = bytearray(chunk.read(10), encoding="iso8859-1", errors="replace")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 3: ordinal not in range(128)
显然,240(十进制的0xf0)超出了ascii编码的范围,但我就是想明确设置编码。可它似乎并没有理会我的设置。
2 个回答
2
我不太确定问题出在哪里。
StringIO 是用来处理字符串的,不是用来处理二进制数据的。
如果你想获取一个表示整个文件内容的字节数组,可以使用:
with open ('filename', 'r') as file: bytes = bytearray (file.read () )
如果你只想获取文件中包含的 ASCII 字符的字符串,可以使用:
with open ('filename', 'r') as file: asciis = file.read ().decode ('ascii', 'ignore')
(如果你在 Windows 上运行,打开文件时可能需要使用二进制标志。)
9
当你把一个字符串转换成另一种编码时,如果这个字符串是 str
类型的,就认为它是 ASCII 编码;如果是 unicode
类型的,就认为它是 Unicode 编码。在创建 bytearray
时,只有在字符串是 unicode
的情况下,才需要指定 encoding
参数。其实你只要不指定编码,就能得到你想要的结果。