如何将代理字符对转换为十六进制?
我发现使用hex()
和ord()
适用于具有单个代码点的字符,例如"😀"等表情符号。例如:
print(hex(ord("😀")))
# '0x1f600'
同样,使用chr()
和int()
可以从十六进制中获取字符:
print(chr(int(0x1f600)))
# '😀'
但是,只要我使用代理符对,比如"👩🏻"这样的表情符号,代码就会抛出一个错误:
print(hex(ord("👩🏻")))
TypeError: ord() expected a character, but string of length 2 found
如何解决这个问题,如何将十六进制转换回字符?
由于没有指定确切的输出格式,那么:
def hexify(s):
return s.encode('utf-32-be').hex(sep=' ', bytes_per_sep=4)
def unhexify(s):
return bytes.fromhex(s).decode('utf-32-be')
s = hexify('👩🏻')
print(s)
print(unhexify(s))
输出:
0001f469 0001f3fb
👩🏻
或类似于您的原始代码:
def hexify(s):
return [hex(ord(c)) for c in s]
def unhexify(L):
return ''.join([chr(int(n,16)) for n in L])
s = hexify('👩🏻')
print(s)
print(unhexify(s))
输出:
['0x1f469', '0x1f3fb']
👩🏻