字符串和字符串编码是两个不同的概念,python作为一门优秀的编程语言中是做了严格的区分,即使用不同的class来表示,同时存储的内容也是不一样的。尽管在python2中区分的还不是特别的明显,但是在python3中是明确的使用str类表示字符串;bytes表示字节串,即可以用来存储字符串编码后的值,说明如下:
首先字符集和字符编码在ASCII,GB2312,GBK中往往混淆这两个概念,因为他们即是字符集也是字符编码,这是编码早期阶段遗留的问题;但是unicode字符集的庞大,使得其产生了诸多编码方式,包括utf8,utf16,utf32等多种编码方式,因此在unicode中需要明确字符集和编码的不同。通常来说,unicode指的是字符集,对应字符的编号;utf8指的是unicode对应的编码。关于utf8编码规则,我在这篇文中有详细的介绍;关于unicode的应用,我在这里有介绍,可以自行查看。
1,Python3中使用str类来表示和存储字符串,在一个具体的字符串对象中存储的内容是每个字符的编号,该编号就是字符集中赋予的。至于该编号使用几个字节来进行存储往往是不确定的,例如常用汉字的编号通常使用两个字节就可以表示编号。对于一些特殊的字符(比如音乐中的那些字符),往往需要更多的字节。这是python 内部的实现机制,不在过多的阐述,感兴趣的同学在学习完本文方法文后,自行研究尝试。
2,Python3中使用bytes类来表示和存储字符串的编码。由于unicode字符集对应的编码方式不止一个,包括utf8,ut16,utf32等等,python通常默认时使用utf8编码方式。因此