【发布时间】:2020-09-08 22:34:13
【问题描述】:
我记录了很多从字节字符串解码为 unicode(UTF-8) 的文本。
例子:
从上游我收到了很多字节字符串,比如:
b_st = b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00'
解码后我把它们保存在我的电脑里
b_un = b_st.decode("utf-8", "replace")
如您所见,初始字节字符串无效
要解码为 UTF-8 的字符(例如 \xff),以便将其替换。
之后我尝试从该 unicode 文本中恢复字节字符串:b_un.encode("utf-8") 但它返回给我另一个字节字符串 , 不一样与原来的。
是否可以恢复原来的字节串?
PS。我没有故意解码这些文本,我没有阅读 Class 的默认行为,该类会在必要时自动将任何文本转换为 unicode。
【问题讨论】:
-
原始字节字符串不是文本,而是 JPEG 图像(请参阅
JFIF,以字节为单位),您不应对其进行解码。而"replace"可能会用某个字节替换不同的字节,并且您不能将此字节编码为不同的值。 -
是的,这就是我想从 utf-8 恢复这些图像的原因,我想知道是否存在类似从已知替换到 jpeg 字节的映射来恢复这些图像
-
我测试了代码,
"replace"总是将相同的字符与代码65533放在一起(即代替字节\xff和\xd8和\xe0)并且你不能映射65533同时返回\xff和\xd8和\xe0。此图片已丢失。
标签: python python-3.x utf-8