git 存储库数据结构是否使用规范编码?

Do the git repository data structures use a canonical encoding?

我正在使用 dulwich(Python 库)访问 git 存储库。当我使用 get_object 检索提交时,它具有许多属性。其中之一是 author。当我检索此属性时,我得到 bytes,因此该属性是未知编码。

有没有我可以安全假设的编码? git 是否在存储之前将所有元数据转换为 utf-8?如果没有,我怎么知道使用哪种编码来解码字节?

元数据应该使用 i18n.commitEncoding config value 设置的值进行编码;每当创建提交时,如果已设置,则当前值将复制到 object 上的 'encoding' header;默认值为 UTF-8。

该编码值在 Dulwitch objects 上作为“.encoding”属性可用;如果它是 None 那么 i18n.commitEncoding 没有明确设置,你可以使用 UTF-8 作为默认值。

但是!存储的实际数据只是跟在传递给 git 的任何字节之后,没有 re-coding 发生。配置值纯粹是信息性的。因此,您需要考虑到使用了不正确的编解码器,如果您打算使用 object.encoding or 'utf8' 作为编解码器,请使用明智的错误处理程序或回退策略。