如何在Python中解码ASCII字符串?

11

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

>>> a = "\x3cdiv\x3e"
>>> print a
您得到的结果是:

The result you get is:

<div>

但如果 a 是一个ASCII编码的字符串:

>>> a = "\\x3cdiv\\x3e" ## it's the actual \x3cdiv\x3e string if you read it from a file
>>> print a

你得到的结果是:

\x3cdiv\x3e

现在我真正想要的是一个 <div> 标签,所以我做了这个:

>>> b = a.decode("ascii")
>>> print b

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

\x3cdiv\x3e

所以基本上我要怎么将a,也就是\x3cdiv\x3e转换成b,也就是应该是<div>

谢谢


你从哪里获取字符串“a”,以及如何获取?我怀疑你获取输入的方式可能有些混淆。在Python中,“解码”是指将8位转换为完整的Unicode;它与特定于语言的转义序列(如反斜杠等)无关。 - Lee Daniel Crocker
@LeeDanielCrocker:从 HTML 源文件中读取它。 - Shane
这仍然不足够的信息。读取它的代码在哪里,输入文件在哪里,输入文件是如何创建的?除非你正在做一些不寻常的事情,否则没有理由以那种方式在一个字符串中使用反斜杠编码的字符串。 - Lee Daniel Crocker
@LeeDanielCrocker:它无处不在。主要用于JavaScript,编码以隐藏iframe,如果您感兴趣:http://ddecode.com/hexdecoder/?results=9bd91cc904cac5ec26673e7adf9157f8 - Shane
你指向的那个页面正在使用Javascript的“unescape”方法,它声称使用URL编码,但URL编码不使用反斜杠代码。因此,这是一些独特于Javascript的格式。我找不到任何文档记录它,事实上,我发现有些资源特别不适用于\x符号。你仍然需要更具体地说明你的输入来源。 - Lee Daniel Crocker
2个回答

17
>>> a = rb"\x3cdiv\x3e"
>>> a.decode('unicode_escape')
'<div>'

此外,还可以查看一些有趣的编解码器


6

使用Python 3.x,您可以将Kabie的答案进行调整,以便更好地适应。

a = b"\x3cdiv\x3e"
a.decode('unicode_escape')

或者
a = b"\x3cdiv\x3e"
a.decode('ascii')

两者都给予

>>> a
b'<div>'

b前缀是什么意思?

字节字符串常以 'b' 或 'B' 作为前缀;它们生成 bytes 类型的实例而非 str 类型。它们只能包含 ASCII 字符;具有数值大于等于 128 的字节必须使用转义表示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接