首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用zlib解压缩git对象

用zlib解压缩git对象
EN

Stack Overflow用户
提问于 2022-02-01 16:32:33
回答 1查看 500关注 0票数 0

我用这个Python脚本解压缩了三个git对象:

代码语言:javascript
复制
import zlib

filename = '/path_to_file' 
compressed_contents = open(filename, 'rb').read() 
decompressed_contents = zlib.decompress(compressed_contents) 
print(decompressed_contents)

对于这三个对象,我得到这三个输出:

代码语言:javascript
复制
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所取代。

  • 那么,git真正存储在这些文件中的是\u0000还是\x00
  • 这个脚本输出git对象的raw content吗?
EN

回答 1

Stack Overflow用户

发布于 2022-02-01 16:50:35

\x00被存储。或者更准确地说:存储一个值为0的字节(如果需要的话是0x00 )。

\u0000是Unicode字符,即一个U+0000 NUL\u转义机制是一种常用的表示Unicode字符的方法,尽管它通常被限制在4个十六进制数字(这意味着它不能表示BMP之外的Unicode代码点)。

为什么这两个是可以互换使用的?因为在大多数字符编码中,\u0000实际上被编码为0x00。具体来说,大多数8位编码以及UTF-8都遵循这一实践。

注意,区分这两件事仍然很重要,因为一个是字符(通常映射到一个字节上),另一个是字节值(通常可以解释为一个字符)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70944136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档