如何将表示UTF-8字符的int转换为Unicode代码点?

时间:2015-03-26 08:33:42

标签: python python-2.7 unicode utf-8 int

我们以角色Latin Capital Letter a with Ogonek (U+0104)为例。

我有一个代表其UTF-8编码形式的int:

my_int = 0xC484
# Decimal: `50308`
# Binary: `0b1100010010000100`

如果使用unichr函数,我会得到:\uC484(U + C484)

但是,我需要输出:Ą

如何将my_int转换为Unicode代码点?

3 个答案:

答案 0 :(得分:3)

要将整数0xC484转换为字节字符串'\xc4\x84'(Unicode字符Ą的UTF-8表示形式),您可以使用struct.pack()

>>> import struct
>>> struct.pack(">H", 0xC484)
'\xc4\x84'

... format string中的>代表 big-endian ,而H代表 unsigned short int 。< / p>

获得UTF-8字节字符串后,可以像往常一样将其解码为Unicode:

>>> struct.pack(">H", 0xC484).decode("utf8")
u'\u0104'

>>> print struct.pack(">H", 0xC484).decode("utf8")
Ą

答案 1 :(得分:1)

使用hex()%x将数字编码为十六进制字符串。然后,您可以使用hex解码器将其解释为一系列十六进制字节。最后使用utf-8解码器获取unicode字符串:

def weird_utf8_integer_to_unicode(n):
    s= '%x' % n
    if len(s) % 2:
        s= '0'+s
    return s.decode('hex').decode('utf-8')

len检查以防第一个字节在0x1-0xF范围内,这会使它缺少前导零。这应该能够处理任何长度的字符串和任何字符(但是在这样的整数中编码字节序列将无法预先设置前导零字节)。

答案 2 :(得分:1)

>>> int2bytes(0xC484).decode('utf-8')
u'\u0104'
>>> print(_)
Ą

其中int2bytes() is defined here