我有这个:
>>> su = u'"/\"'
在python中,如何将其转换为显示unicode代码点的表示形式?对于上面的字符串,这将是这个
u'\u0022\u002F\u005C\u0022'
答案 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