[英]How do I convert an int representing a UTF-8 character into a Unicode code point?
让我们以带有Ogonek(U + 0104)的拉丁大写字母a为例。
我有一个表示其UTF-8编码形式的整数:
my_int = 0xC484
# Decimal: `50308`
# Binary: `0b1100010010000100`
如果使用unichr
函数,我得到: \쒄
或쒄
(U + C484)
但是,我需要它输出: Ą
如何将my_int
转换为Unicode代码点?
要将整数0xC484
转换为字节字符串'\\xc4\\x84'
(Unicode字符Ą
的UTF-8表示形式),可以使用struct.pack()
:
>>> import struct
>>> struct.pack(">H", 0xC484)
'\xc4\x84'
...,其中格式字符串中的>
表示big-endian , H
表示无符号short int 。
拥有UTF-8字节串后,您可以照常将其解码为Unicode:
>>> struct.pack(">H", 0xC484).decode("utf8")
u'\u0104'
>>> print struct.pack(">H", 0xC484).decode("utf8")
Ą
使用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范围内,这将使其丢失前导零。 这应该能够处理任何长度的字符串和任何字符(但是,用这样的整数编码字节序列将无法假装前导零字节)。
>>> int2bytes(0xC484).decode('utf-8')
u'\u0104'
>>> print(_)
Ą
这里定义了int2bytes()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.