【问题标题】:Function byte encode same input and have different responses功能字节编码相同的输入并具有不同的响应
【发布时间】:2020-06-09 23:18:54
【问题描述】:

这怎么可能?我正在使用python3。

a= b"\xfc\x48\x83\xe4\xf0\xe8"
b= "\xfc\x48\x83\xe4\xf0\xe8"
if (a == b.encode('ascii',errors='replace')):
      print ("Winner")

print (a)
b'\xfcH\x83\xe4\xf0\xe8'
print (b)
üHäðè

我尝试了不同类型的错误,但没有。如果我没有输入任何错误,它会弹出一个错误,上面写着codec can't encode character '\xfc' in position 0: ordinal not in range(128)。我已经阅读了the official manual 上的手册,但我找不到任何好的答案。

我想知道如何将 B 转换(强制)为 A。相同的打印,相同的输出。

编辑:我找到了解决方案。我想从十六进制字符串转换为字节。最后我所做的是从字符串中替换“\x”。这会留下带有十六进制字符的字符串。然后我使用了字节函数 bytes.fromhex()。

b = b.replace("\\x", "")
b = bytes.fromhex(b)

【问题讨论】:

  • 你到底想在这里做什么? b.encode("ascii") 表示获取 ascii 字符串并将其编码为二进制。但是你的 ascii 字符串是无效的,就像它包含汉字、表情符号等就不是 ascii 一样。
  • 要将字节范围(最多 255 个)内的 Unicode 字符转换为字节,请使用编码“latin-1”。
  • 我正在尝试将(强制)字符串转换为字节对象而不添加任何内容。我有一个程序将字节对象作为字符串返回。我想声明这个字符串作为字节对象返回,就像我对 A 变量所做的一样(但我做不到)。

标签: python python-3.x encode


【解决方案1】:

从您链接的文档中:

编码不必处理所有可能的 Unicode 字符,大多数编码也不需要。例如,Python 的默认编码是“ascii”编码。将 Unicode 字符串转换为 ASCII 编码的规则很简单;对于每个代码点:

如果码位

如果代码点为 128 或更大,则 Unicode 字符串无法用此编码表示。 (在这种情况下,Python 会引发 UnicodeEncodeError 异常。)

它看起来像第一个代码点\xfc > 128,这意味着您不能用ascii 编码来表示它。

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 2012-07-19
    • 2017-04-11
    • 2017-12-25
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多