我正在玩我关注的unicode
s='ab'
s.encode('utf8')
Out[44]: b'ab'
s.encode('utf16')
Out[45]: b'\xff\xfea\x00b\x00'
s.encode('utf32')
Out[46]: b'\xff\xfe\x00\x00a\x00\x00\x00b\x00\x00\x00'
我的问题是为什么utf-8只是返回字符串而其他编码返回正确的输出? 不应该是第一个编码utf-8返回字节编码,如utf-16和utf-32?
答案 0 :(得分:1)
标准的ascii字符在utf-8
中编码为自己。您的utf-8
编码是正确的。这是utf-8
的优势之一。
答案 1 :(得分:1)
我期待像b'\ x .. \ x ..
这样的东西
b'ab'
b'\xff\xfea\x00b\x00'
b'\xff\xfe\x00\x00a\x00\x00\x00b\x00\x00\x00'
是每个字节序列最简单的Python表示。 a
和b
字面上包含在表示中,因为这是更短,更易读的选项;对于字节\x00
,不会这样做,因为那是一个不可见的控制字符。
尽管如此,如果您愿意,您当然可以将a
和b
写为\x
,这样会产生完全相同的文字:
b'\x61\x62'
b'\xff\xfe\x61\x00\x62\x00'
b'\xff\xfe\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00'
UTF-8的优点和特定设计目标是将普通旧ASCII字符编码为单字节,而无需任何额外的空字节或BOM信令。