在Python2“窄”构建中,它非常简单:
>>> emoticon = u'\U0001f498'
>>> map(ord,emoticon)
[55357, 56472]
这在Python2(窄和宽版本)和Python3中都适用:
from __future__ import print_function
import struct
emoticon = u'\U0001f498'
print(struct.unpack('<2H',emoticon.encode('utf-16le')))
输出:
(55357, 56472)
这是一个更通用的解决方案,可以为任意长度的字符串打印utf-16代码点:
from __future__ import print_function,division
import struct
def utf16words(s):
encoded = s.encode('utf-16le')
num_words = len(encoded) // 2
return struct.unpack('<{}H'.format(num_words),encoded)
emoticon = u'ABC\U0001f498'
print(utf16words(emoticon))
输出:
(65, 66, 67, 55357, 56472)