如何将ASCII字符串视为unicode并在python中取消转义字符的外观?

2024-10-09 01:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,如果我有一个unicode字符串,我可以将其编码为一个ASCII字符串,如下所示:

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

但是,例如,这个ASCII字符串:

'\u003foo\u003e'

。。。我想转换成与上面第一个示例中相同的ASCII字符串:

'<foo/>'

Tags: 字符串示例编码fooasciiunicodeencodeu003cfoo
3条回答

我花了一段时间才弄明白,但this page得到了最好的答案:

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

还有一个“原始unicode转义”编解码器来处理指定unicode字符串的另一种方法——查看链接页面的“unicode构造函数”部分以了解更多详细信息(因为我不是unicode saavy)。

编辑:另请参见Python Standard Encodings

Ned Batchelder说:

It's a little dangerous depending on where the string is coming from, but how about:

>>> s = '\u003cfoo\u003e'
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii')
'<foo>'

实际上,这种方法可以像这样安全:

>>> s = '\u003cfoo\u003e'
>>> s_unescaped = eval('u"""'+s.replace('"', r'\"')+'-"""')[:-1]

注意三引号字符串和短划线在最后三个引号之前。

  1. 使用带3个引号的字符串将确保如果用户在字符串中输入“\\”(为清晰可见而添加的空格),则不会中断求值器
  2. 最后的破折号是故障保护,以防用户的字符串以“\”结尾。在分配结果之前,我们用[:-1]分割插入的破折号

因此,只要以原始格式捕获,就不必担心用户输入的内容。

在Python 2.5上,正确的编码是“unicode_escape”,而不是“unicode escape”(注意下划线)。

我不确定新版本的Python是否更改了unicode名称,但这里只使用下划线。

不管怎样,就是这样。

相关问题 更多 >

    热门问题