我用这个Python脚本解压缩了三个git对象:
import zlib
filename = '/path_to_file'
compressed_contents = open(filename, 'rb').read()
decompressed_contents = zlib.decompress(compressed_contents)
print(decompressed_contents)对于这三个对象,我得到这三个输出:
b'tree 32\x00100644 file\x00\xe6\x01\xe5\x92\x8e\xcc.\xc5\xbe\t\x91{\xe9\x92:\x85\xc4\x89\xe9H'
b'commit 196\x00tree 2b32fe41c7f8c21d5010fb59a59bcce42b2b3ab5\nauthor author <author> 1643729123 +0100\ncommitter author_email <author_email> 1643729123 +0100\n\nadd hello\n'
b'blob 6\x00hello\n'在git文档(git probook)中,他们说git在对象头( \u0000 )的末尾添加了一个空字节。但是当我用zlib解压缩这些对象时,\u0000被\x00所取代。
\u0000还是\x00?raw content吗?发布于 2022-02-01 16:50:35
\x00被存储。或者更准确地说:存储一个值为0的字节(如果需要的话是0x00 )。
\u0000是Unicode字符,即一个U+0000 NUL。\u转义机制是一种常用的表示Unicode字符的方法,尽管它通常被限制在4个十六进制数字(这意味着它不能表示BMP之外的Unicode代码点)。
为什么这两个是可以互换使用的?因为在大多数字符编码中,\u0000实际上被编码为0x00。具体来说,大多数8位编码以及UTF-8都遵循这一实践。
注意,区分这两件事仍然很重要,因为一个是字符(通常映射到一个字节上),另一个是字节值(通常可以解释为一个字符)。
https://stackoverflow.com/questions/70944136
复制相似问题