将 Python 2 转换为 Python 3 时的编码问题(使用 lmdb)

Encoding issues when converting Pyhon 2 to Python 3 (using lmdb)

我正在尝试将 Python 2 中的一些代码转换为 Python 3。我不太熟悉 [=30= 的两个版本之间编码工作方式的变化], 所以不太确定如何措辞这个问题。

基本上 Python2 中的代码如下所示:

image_key = "image_3"
env = lmdb.open(some arguments here)

with env.begin(write=False) as txn:
    img_tmp = txn.get(image_key)
    img = Image.open(StringIO(img_tmp))

在 Python 2 中,"img_tmp" 将是一个具有不可读字符的字符串对象(打印它让我一团糟:�PNGIHDR �A�� gAMA ����acHRMz&���� � �u0�`...)。下一行会将图像打开为枕头图像。

在 Python 3 中,行 txn.get() 会给我一个错误 "TypeError: Won't implicitly convert Unicode to bytes; use .encode()" 所以我按照建议将行转换为:

img_tmp = txn.get(img_key.encode())

但是,img_tmp 现在是一个字节对象,读取内容如下:"b'\x89PNG\r\n\x1a\n\x00\ ..."

并且下一行将不再打开图像。关于如何更改代码以使其正常工作的任何建议?

你就快完成了:只需使用 BytesIO 而不是 StringIO,因为你的二进制数据是 bytes 而不是 str.