串行到Python中的unicode代码点escpe序列

时间:2013-05-15 14:07:24

标签: python encoding utf-8

这是我的问题......我有一个“正常”字符串,如:

Hello World

与我找到的所有其他主题不同,我想打印它,因为它是Unicode Codepoint Escape值!

我正在寻找的输出是这样的:

\u0015\u0123



如果有人有想法:)

2 个答案:

答案 0 :(得分:1)

您只编码的ASCII码点。 UTF-8是ASCII的超集,任何ASCII码点都编码为ASCII将使用的相同字节。您打印的内容是正确的, UTF-8。

使用一些非ASCII代码点来查看差异:

>>> 'Hello world with an em-dash: \u2014\n'.encode('utf8')
b'Hello world with an em-dash: \xe2\x80\x94\n'

Python会在显示带有可打印ASCII字节的bytes值时使用字符本身。 可打印的任何字节值都显示为\x..转义码,如果有一个(\n换行符,则显示单字符转义序列。)

另一方面,从您的示例输出中,您似乎希望输出Python unicode文字转义码:

>>> '\u0015\u0123'
'\x15ģ'

由于U + 0123是可打印的,因此Python 3只显示它;不可打印的U + 0015(NEGATIVE ACKNOWLEDGE)是0x00 - 0xFF范围内的代码点,使用较短的\x..转义符号显示。

要显示文本的 unicode转义序列,您需要逐个字符地处理它:

>>> input_text = 'Hello World!'
>>> print(''.join('\\u{:04x}'.format(ord(c)) for c in input_text))
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064\u0021
>>> input_text = 'Hello world with an em-dash: \u2014\n'
>>> print(''.join('\\u{:04x}'.format(ord(c)) for c in input_text))
\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u006f\u0072\u006c\u0064\u0020\u0077\u0069\u0074\u0068\u0020\u0061\u006e\u0020\u0065\u006d\u002d\u0064\u0061\u0073\u0068\u003a\u0020\u2014\u000a

重要的是要强调这是 UTF-8。

答案 1 :(得分:0)

您可以将 ord 用于编码的字节数字,并使用字符串格式显示其十六进制值。

>>> s = u'Hello World \u0664\u0662'
>>> print s
Hello World ٤٢
>>> print ''.join('\\x%02X' % ord(c) for c in s.encode('utf-8'))
\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x20\xD9\xA4\xD9\xA2