通过修订从 gitpython 获取二进制文件(获取 unicodestring,需要字节)

Get a binary file from gitpython by revision (got unicodestring, want bytes)

我想使用 gitpython 访问 git 存储库中二进制文件的内容。不幸的是 repo.git.show returns 一个 unicode 字符串而不是一个字节对象。所以我想将字符串转换成字节,但失败了。

#!/usr/bin/env python

from io import BytesIO
import git

# initialize repository
repo = git.Repo('.')
# use git show to get the content of example.jpg in revision 19e91a
u = repo.git.show("4cb2a02:example.jpg")

b = BytesIO(u.encode('utf-8'))

和运行变成

UnicodeEncodeError: 'utf-8' codec can't encode character '\udcff' in position 0: surrogates not allowed

这并不奇怪。

如何将此 unicode 字符串转换为字节?或者更好的是,我如何将文件的内容作为字节对象获取?

尝试

b = BytesIO(u.encode('utf-8','surrogateescape'))