显而易见,计算机当中的一切都只是对0和1的抽象,当我们与0和1直接打交道时,比如图片、压缩包等,我们往往不用太关心抽象方式。但是在处理字符串等对象的时候,不弄清楚其中的工作机制则会寸步难行,一个常见的问题就是乱码。
以下是我总结的部分python3字符串处理相关知识,关于字符集和字符编码的知识这里不再累述。
1,string与bytes
python3中对这两种类型做了严格的区分,从外界比如网络读取的数据一般是bytes,要作为string使用必须进行显式的转换,转换方法如下文。
2,decode与encode
bytes.decode("gb2312"):解码bytes,将bytes转换为gb2312编码的string。
string.encode("gb2312"):编码string,将string转换为gb2312编码的bytes。
python以utf-8作为默认编码,因此上述方法的参数的缺省值都是utf-8。
decode做的是解释的工作,encode则在做映射工作。如开头所说,计算机世界的硬通货是0和1,而各种编码则可以比喻成软通货。我们用decode指定的规则(编码)解释0和1,用encode去将字符串映射成0和1,从而完成相应的工作:处理或者传输数据。
在理解上述规则之后,再加以了解字符串原来的编码,就可以避免出现乱码的情况了。这里又分两种情况。1,代码中的字符串的编码取决于代码文件的编码。2,外界输入的字符串的编码取决于其本身的编码。