【问题标题】:Convert octal representation of UTF-8转换 UTF-8 的八进制表示
【发布时间】:2018-11-10 07:00:42
【问题描述】:

我有一个这样的变量:

>>> s = '\\320\\227\\320\\264\\320\\260\\320\\275\\320\\270\\320\\265 \\320\\261\\321\\213\\320\\262\\321\\210\\320\\265\\320\\271'
>>> print(s)
\320\227\320\264\320\260\320\275\320\270\320\265 \320\261\321\213\320\262\321\210\320\265\320\271

这包含字符串“Зданиебывшей”的 UTF-8 编码的八进制转义表示(八进制 320 227 = 十六进制 D0 97 = UTF-8 表示“З”)。如何将此字符串解码为“Зданиебывшей”?

【问题讨论】:

  • 我的问题不同.. @deceze.. 我不能写 b'\320\227\320\264\320\260\320\275\320\270\320\265 \320\ 261\321\213\320\262\321\210\320\265\320\271' 因为我将八进制值作为字符串对象动态获取
  • stackoverflow.com/a/23173435/476...?不?预期的结果是什么?
  • 八进制值在 STRING 对象中。我无法解码字符串对象而不将其转换为字节对象,对吗?所以如果我将一个字符串对象转换为字节,八进制内容就会改变。我必须将字符串变量(已经是八进制)中的值转换为字节对象而不更改八进制值,以便我可以对其进行解码
  • 是的。那么您可能正在寻找stackoverflow.com/a/24519338/476
  • ;-;这个完全不同。我想你不明白我的问题。我只想将字符串对象(包含八进制值)转换为字节对象。例如:str = "\320\320\320" 我必须把它变成一个像这样的字节对象 byte_str = b'\320\320\320'

标签: python-3.x encoding decoding


【解决方案1】:

这有点小题大做。

s = '\\320\\227\\320\\264\\320\\260\\320\\275\\320\\270\\320\\265 \\320\\261\\321\\213\\320\\262\\321\\210\\320\\265\\320\\271'

b = bytes([int(i, 8) for i in s.split("\\")[1:]])

print(b.decode("utf8"))

产量:Зданиебывшей

或者使用codecs 模块。

b2 = codecs.escape_decode(s)[0]
print(b2.decode("utf8"))

这会产生相同的结果。

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2020-02-06
    相关资源
    最近更新 更多