哪个是在Python 3中将Unicode字符串转换为十六进制的正确方法?

问题描述 投票:0回答:2

我发现了两种在Python中将字符串转换为十六进制的方法:

第一种方式:

ss = "Ế string"
sss = [hex(ord(sc)) for sc in ss]
ssss = ''.join(sss).replace('0x', '')
print(ssss)  # The result is 1ebe20737472696e67

第二种方式:

import codecs
ss = "Ế string"
sss = codecs.encode(codecs.encode(ss, 'utf-8'), 'hex')
print(sss.decode('utf-8'))  # The result is: e1babe20737472696e67

两种方式返回差值结果,正确的代码是什么?

python text hex
2个回答
-1
投票

我不知道为什么要这样将字符串转换为十六进制,但是我认为第二种方法更好:

ss = "Ế string"
# first decode the string to get the correct code point for utf8.
ss = ss.encode('utf-8')
# then convert the int code point to hex
sss = [hex(sc) for sc in ss]

print(''.join(sss).replace('0x', ''))

[现在为什么因为使用decode将转换字符串,所以byte的序列是整数序列,每个值都是指定编解码器code pointcharacter('utf8')。此code pointcodec更改为另一个。基本上,它将字符串转换为使用另一个hexutf8中的codec表示形式将生成不同的hex表示形式。


-2
投票

我找到了答案,第一种方法返回UTF-16BE编码的字符串,第二种方法返回UTF-8编码的字符串。如果我将第二种方式更改为codecs.encode(codecs.encode("ẵ", "utf-16be"),"hex"),则它们将返回相同的结果

© www.soinside.com 2019 - 2024. All rights reserved.