将字符串编码为unicode

时间:2015-12-25 17:39:02

标签: python unicode

我正在玩我关注的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?

2 个答案:

答案 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表示。 ab字面上包含在表示中,因为这是更短,更易读的选项;对于字节\x00,不会这样做,因为那是一个不可见的控制字符。

尽管如此,如果您愿意,您当然可以将ab写为\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信令。