转换unicode字符串以查看unicode代码点

时间:2015-10-22 01:42:01

标签: python python-2.7 unicode

我有这个:

>>> su = u'"/\"'

在python中,如何将其转换为显示unicode代码点的表示形式?对于上面的字符串,这将是这个

u'\u0022\u002F\u005C\u0022'

2 个答案:

答案 0 :(得分:4)

原始字符串不是四个字符,而是三个字符,因为\"是双引号的转义码:

>>> su = u'"/\"'
>>> len(su)
3

以下是如何将其显示为转义码:

>>> ''.join(u'\\u{:04X}'.format(ord(c)) for c in su)
u'\\u0022\\u002F\\u0022'

使用Unicode原始字符串或双反斜杠来转义斜杠并获得四个字符:

>>> su = ur'"/\"' # Raw version
>>> ''.join(u'\\u{:04X}'.format(ord(c)) for c in su)
u'\\u0022\\u002F\\u005C\\u0022'

>>> su = u'"/\\"' # Escaped version
>>> ''.join(u'\\u{:04X}'.format(ord(c)) for c in su)
u'\\u0022\\u002F\\u005C\\u0022'

注意结果中的双反斜杠。这表明它是单个字面反斜杠。使用一个反斜杠,它们将是转义码...与原始字符串没有区别:

>>> ur'"/\"' == u'\u0022\u002F\u005C\u0022'
True

打印它会显示字符串的内容:

>>> print u'\u0022\u002F\u005C\u0022'
"/\"
>>> print(''.join(u'\\u{:04X}'.format(ord(c)) for c in su))
\u0022\u002F\u005C\u0022

答案 1 :(得分:1)

要支持完整的Unicode范围,您可以使用unicode-escape来获取文本表示。要在unicode转义时表示ascii范围内的字符并强制\u00xx代表u'\xff',您可以使用正则表达式:

#!/usr/bin/env python2
import re

su = u'"/"\U000af600'
assert u'\ud800' not in su # no lone surrogate
print re.sub(ur'[\x00-\xff]', lambda m: u"\ud800u%04x" % ord(m.group()), su, 
             flags=re.U).encode('unicode-escape').replace('\\ud800', '\\')

使用单独的代理(U + d800)来避免两次反斜杠。

输出

\u0022\u002f\u0022\U000af600