Python ASCII到Unicode

Whi*_*ate 2 python unicode ascii

我知道如何从你'u4f60\u597d'获得这个'4f60597d'

>>> u_str= u'??'
>>> repr(u_str).replace('\u', '')[2:-1] 
'4f60597d'
Run Code Online (Sandbox Code Playgroud)

但是如果字符串中有一些ascii:

>>> u_str= u'12??'    
>>> repr(u_str).replace('\u', '')[2:-1] 
'124f60597d'
Run Code Online (Sandbox Code Playgroud)

不是我想要的结果.

我希望我能得到这样的输出: 003100324f60597d

你可以告诉我吗?

Mar*_*ers 5

您可以使用ord()获取每个字符的整数代码点,而不是格式化:

''.join(format(ord(c), '04x') for c in u_str)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> u_str = u'12??'  
>>> ''.join(format(ord(c), '04x') for c in u_str)
'003100324f60597d'
Run Code Online (Sandbox Code Playgroud)

或者您可以编码为UTF-16(大端)并使用binascii.hexlify()结果; 这可能是更快的选择:

from binascii import hexlify

hexlify(u_str.encode('utf-16-be'))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> from binascii import hexlify
>>> hexlify(u_str.encode('utf-16-be'))
'003100324f60597d'
Run Code Online (Sandbox Code Playgroud)

后者还处理BMP之外的字符,每个代码点需要4个字节,这将使用UTF-16代理对进行编码:

>>> hexlify(u'\U0001F493'.encode('utf-16-be'))
'd83ddc93'
Run Code Online (Sandbox Code Playgroud)