我目前正在试验python3在读写数据时如何处理字节,我遇到了一个特别麻烦的问题,我似乎找不到问题的根源。我基本上是从JPEG文件中读取字节,使用ord()
将它们转换成整数,然后使用chr(character).encode('utf-8')
行将字节返回到原始字符,并将其写回JPEG文件。没问题吧?当我尝试打开JPEG文件时,我收到一个windows8.1通知说它不能打开照片。当我检查两个文件时,一个是5.04MB,另一个是7.63MB,这让我非常困惑。你知道吗
def __main__():
operating_file = open('photo.jpg', 'rb')
while True:
data_chunk = operating_file.read(64*1024)
if len(data_chunk) == 0:
print('COMPLETE')
break
else:
new_operation = open('newFile.txt', 'ab')
for character in list(data_chunk):
new_operation.write(chr(character).encode('utf-8'))
if __name__ == '__main__':
__main__()
这正是我正在使用的代码,有什么想法发生了什么,我可以如何修复它?你知道吗
注意:我假设list(data_chunk)
提供的数字列表等价于ord()
。你知道吗
当您有一个代码点并用UTF-8编码时,结果可能比原始的包含更多的字节。你知道吗
对于一个具体的例子,请参考WikiPedia page并考虑十六进制值
0xA2
。你知道吗这是一个二进制值,小于255,但当编码为UTF8时,它变成
0xC2, 0xA2
。你知道吗考虑到要从源文件中提取字节,我的第一个建议是直接将字节传递给目标文件的编写器。你知道吗
如果您试图理解文件I/O是如何工作的,那么在使用二进制文件模式时要小心
encode()
。二进制文件不需要编码或解码-它们是原始数据。你知道吗下面是一个您可能希望使用的简单示例:
如您所见,bytes对象是iterable,但是在
for
循环中,我们在i
中得到了一个int
。要将其转换为字节,我使用int.to_bytes()
方法。你知道吗相关问题 更多 >
编程相关推荐