我发现了两种在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
两种方式返回差值结果,正确的代码是什么?
我不知道为什么要这样将字符串转换为十六进制,但是我认为第二种方法更好:
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 point
中character
的('utf8')
。此code point
从codec
更改为另一个。基本上,它将字符串转换为使用另一个hex
的utf8
中的codec
表示形式将生成不同的hex
表示形式。
我找到了答案,第一种方法返回UTF-16BE编码的字符串,第二种方法返回UTF-8编码的字符串。如果我将第二种方式更改为codecs.encode(codecs.encode("ẵ", "utf-16be"),"hex")
,则它们将返回相同的结果