从python中的unicode字符串获取字节

时间:2010-11-21 19:01:36

标签: python unicode byte

我有一个16位大端的unicode字符串,表示为u'\ u4132',

如何在python中将它拆分为整数41和32?

6 个答案:

答案 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)

  • Java:"\u4132".getBytes("UTF-16BE")
  • Python 2:u'\u4132'.encode('utf-16be')
  • Python 3:'\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需要一个代理对来编码这些编码点。