【问题标题】:Recover byte string with invalid characters(UTF-8) after having decoded it in Python在 Python 中解码后恢复具有无效字符(UTF-8)的字节字符串
【发布时间】:2020-09-08 22:34:13
【问题描述】:

我记录了很多从字节字符串解码为 un​​icode(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


【解决方案1】:

replace 是有损codec error handler,用\ufffd(unicode 替换字符)替换任何不可解码的字节

因此无法恢复您的原始图像

如果你收到一个字节字符串,你可以使用二进制 io 对象将它写入文件:

with open(filename, 'wb') as f:
    f.write(byte_string)

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 2017-08-30
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多