我有一个16位大端的unicode字符串,表示为u'\ u4132',
如何在python中将它拆分为整数41和32?
答案 0 :(得分:15)
以下是您可能需要的各种不同方式。
Python 2:
>>> chars = u'\u4132'.encode('utf-16be')
>>> chars
'A2'
>>> ord(chars[0])
65
>>> '%x' % ord(chars[0])
'41'
>>> hex(ord(chars[0]))
'0x41'
>>> ['%x' % ord(c) for c in chars]
['41', '32']
>>> [hex(ord(c)) for c in chars]
['0x41', '0x32']
Python 3:
>>> chars = '\u4132'.encode('utf-16be')
>>> chars
b'A2'
>>> chars = bytes('\u4132', 'utf-16be')
>>> chars # Just the same.
b'A2'
>>> chars[0]
65
>>> '%x' % chars[0]
'41'
>>> hex(chars[0])
'0x41'
>>> ['%x' % c for c in chars]
['41', '32']
>>> [hex(c) for c in chars]
['0x41', '0x32']
答案 1 :(得分:4)
"\u4132".getBytes("UTF-16BE")
u'\u4132'.encode('utf-16be')
'\u4132'.encode('utf-16be')
这些方法返回一个字节数组,您可以轻松地将其转换为int数组。但请注意,U+FFFF
以上的代码点将使用两个代码单元进行编码(因此使用UTF-16BE,这意味着32位或4个字节)。
答案 2 :(得分:2)
“那些”不是整数,它是一个代表code point的十六进制数。
如果要获取代码点的整数表示,则需要使用ord(u'\u4132')
,如果现在要将其转换回unicode字符,请使用unicode()
返回unicode字符串。< / p>
答案 3 :(得分:2)
>>> c = u'\u4132'
>>> '%x' % ord(c)
'4132'
答案 4 :(得分:1)
肮脏的黑客:repr(u'\u4132')
将返回"u'\\u4132'"
答案 5 :(得分:0)
将unicode字符传递到ord()
以获取其代码点,然后使用int.to_bytes()
将该代码点分成单个字节,然后根据需要格式化输出:
list(map(lambda b: hex(b)[2:], ord('\u4132').to_bytes(4, 'big')))
返回:['0', '0', '41', '32']
list(map(lambda b: hex(b)[2:], ord('\N{PILE OF POO}').to_bytes(4, 'big')))
返回:['0', '1', 'f4', 'a9']
正如我在另一条评论中提到的那样,将编码点编码为utf16对于BMP(基本多语言平面)之外的编码点将无法正常工作,因为UTF16需要一个代理对来编码这些编码点。