这是我的问题......我有一个“正常”字符串,如:
Hello World
与我找到的所有其他主题不同,我想打印它,因为它是Unicode Codepoint Escape值!
我正在寻找的输出是这样的:
\u0015\u0123
如果有人有想法:)
答案 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