Python 对十六进制和utf-8编码感到困惑
让我们来看看角色ñ() 当我运行Python 对十六进制和utf-8编码感到困惑,python,utf-8,character-encoding,Python,Utf 8,Character Encoding,让我们来看看角色ñ() 当我运行ord('ñ')时,我返回241——即它是第241个编码字符。 当我运行hex(ord('ñ'))时,我返回0xf1,这是241的十六进制值 那么,为什么当我运行“ñ”.encode('utf-8')时,我会返回b'\xc3\xb1'或50097?我们刚才不是确认了ñ是f1(十六进制)还是241(十二进制)?241是unicode码点,对应于字形“拉丁文小写字母N加波浪号”。在Python中,字符作为unicode码点存储在内部,因此ord('ñ')是241 编码
ord('ñ')
时,我返回241
——即它是第241个编码字符。当我运行
hex(ord('ñ'))
时,我返回0xf1
,这是241
的十六进制值
那么,为什么当我运行
“ñ”.encode('utf-8')
时,我会返回b'\xc3\xb1'
或50097
?我们刚才不是确认了ñ
是f1
(十六进制)还是241
(十二进制)?241是unicode码点,对应于字形“拉丁文小写字母N加波浪号”。在Python中,字符作为unicode码点存储在内部,因此ord('ñ')
是241
编码是字符到字节的映射。不同的编码可能使用也可能不使用相同的字节来表示相同的字符
>>> 'ñ'.encode('utf-8')
b'\xc3\xb1'
>>> 'ñ'.encode('latin-1')
b'\xf1'
>>> 'ñ'.encode('cp1252')
b'\xf1'
>>> 'ñ'.encode('cp1254')
b'\xf1'
>>> 'ñ'.encode('utf-16')
b'\xff\xfe\xf1\x00'
>>> 'ñ'.encode('utf-32')
b'\xff\xfe\x00\x00\xf1\x00\x00\x00'
如果在不提供目标编码的情况下调用str.encode()
,Python将在本例中选择系统默认值-UTF-8
总而言之:
返回特定字符的unicode码点ord
返回所提供编码中映射到该字符的字节s.encode(“”)