你如何解码python中的ascii字符串?

Sha*_*ane 4 python string ascii character-encoding

例如,在你的python shell(IDLE)中:

>>> a = "\x3cdiv\x3e"
>>> print a
Run Code Online (Sandbox Code Playgroud)

你得到的结果是:

<div>
Run Code Online (Sandbox Code Playgroud)

但如果a是ascii编码的字符串:

>>> a = "\\x3cdiv\\x3e" ## it's the actual \x3cdiv\x3e string if you read it from a file
>>> print a
Run Code Online (Sandbox Code Playgroud)

你得到的结果是:

\x3cdiv\x3e
Run Code Online (Sandbox Code Playgroud)

现在我真正想要的a<div>,所以我这样做了:

>>> b = a.decode("ascii")
>>> print b
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,我没有得到我想要的结果,它仍然是:

\x3cdiv\x3e
Run Code Online (Sandbox Code Playgroud)

所以基本上我该怎么办转换a,这是\x3cdiv\x3eb,这应该是<div>

谢谢

Kab*_*bie 9

>>> a = rb"\x3cdiv\x3e"
>>> a.decode('unicode_escape')
'<div>'
Run Code Online (Sandbox Code Playgroud)

另请参阅一些有趣的编解码器.


kir*_*off 5

使用python 3.x,您可以将 Kabie 答案调整为

a = b"\x3cdiv\x3e"
a.decode('unicode_escape')
Run Code Online (Sandbox Code Playgroud)

或者

a = b"\x3cdiv\x3e"
a.decode('ascii')
Run Code Online (Sandbox Code Playgroud)

两者都给予

>>> a
b'<div>'
Run Code Online (Sandbox Code Playgroud)

b前缀是什么?

字节文字始终以“b”或“B”为前缀;它们生成 bytes 类型而不是 str 类型的实例。它们只能包含 ASCII 字符;数值为 128 或更大的字节必须使用转义符表示。