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

Python中的字符串到unicode代码点escpe序列,python,encoding,utf-8,Python,Encoding,Utf 8,这是我的问题。。。我有一个“普通”字符串,如: Hello World 与我发现的所有其他主题不同,我想将其打印为Unicode码点转义值 我想要的输出是这样的: \u0015\u0123 如果有人有想法:)您只对ASCII码点进行编码。UTF-8是ASCII的超集,任何ASCII码点都被编码为ASCII将使用的相同字节。您正在打印的内容是正确的,是UTF-8 使用一些非ASCII码点查看差异: >>> 'Hello world with an em-dash: \u20

这是我的问题。。。我有一个“普通”字符串,如:

Hello World
与我发现的所有其他主题不同,我想将其打印为Unicode码点转义值

我想要的输出是这样的:

\u0015\u0123



如果有人有想法:)

您只对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
值时,只会使用字符本身。任何不可打印的字节值都显示为转义码,如果有单字符转义序列(
\n
用于换行符),则显示为单字符转义序列

另一方面,从示例输出来看,您似乎希望输出Python unicode文本转义码:

>>> '\u0015\u0123'
'\x15ģ'
因为U+0123是可打印的,所以Python 3只显示它;不可打印的U+0015(
否定应答
)是
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,但是。

您可以使用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

u\0015\0123
不是UTF8字符串。此外,UTF-8是ASCII的超集,因此打印编码为UTF-8的ASCII字符也是ASCII。为什么要这样做?
\u0015\u0123
是Unicode码点转义,它们也不是UTF-8。我不明白你想要什么输出。我知道这就是目前正在发生的事情,但这不是我想要的输出。我希望输出是如中所示的数值\u2014@user2243892:那么你需要更清楚地知道你在寻找什么。