如何在Python中将ASCII字符串视为Unicode并解码其中的转义字符?

30 投票
5 回答
24896 浏览
提问于 2025-04-11 09:34

比如说,如果我有一个 unicode 字符串,我可以把它转换成一个 ASCII 字符串,方法是这样的:

>>> u'\u003cfoo/\u003e'.encode('ascii')
'<foo/>'

但是,我有一个这样的 ASCII 字符串:

'\u003foo\u003e'

... 我想把它变成和我上面第一个例子中一样的 ASCII 字符串:

'<foo/>'

5 个回答

2

在某个时候,当你遇到像中文字符或表情符号这样的特殊字符时,你可能会遇到一些问题,特别是在你想要解码字符串的时候。这些问题通常会显示成这样的错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 109-123: ordinal not in range(128)

以我处理推特数据为例,我是这样解码的,这样就能看到所有字符而没有错误了。

>>> s = '\u003cfoo\u003e'
>>> s.decode( 'unicode-escape' ).encode( 'utf-8' )
>>> <foo>
2

在Python 2.5中,正确的编码方式是"unicode_escape",而不是"unicode-escape"(注意这里是下划线)。

我不太确定新版本的Python是否改了这个unicode的名称,但在这里只有用下划线的方式才能正常工作。

总之,就是这样。

53

我花了一些时间才搞明白这个问题,不过这个页面给出了最好的答案:

>>> s = '\u003cfoo/\u003e'
>>> s.decode( 'unicode-escape' )
u'<foo/>'
>>> s.decode( 'unicode-escape' ).encode( 'ascii' )
'<foo/>'

还有一种叫做'raw-unicode-escape'的编码方式,可以用来处理另一种表示Unicode字符串的方法——想了解更多细节,可以查看链接页面的“Unicode构造函数”部分(因为我对Unicode不是很熟悉)。

补充:还可以看看Python标准编码

撰写回答