在python里面,你定义一个字符串的时候,就已经通过编码器,对你输入的字符串进行编码,并且放入内存。
规则1:放入内存里面的字符串,一定经过编码
当使用print 对字符串变量进行打印,必须要对字符串进行解码才能显示。注意这里只是显示,要显示正确,必须用对应的字符集(gbk, gb2312, utf-8, ascii)。如果显示错误(仅是人类感知,计算机不知道情况),就是乱码。
规则2:控制台标准输出,浏览器显示区,notepad文字区等,都是需要进行解码后才可以显示的
举例:
在写自动发送邮件过程,包含多次编码解码动作
1. 生成html文件,在python3可以指定编码。
2. 读取的时候,在python2.7需要进行指定解码字符集,
3. 经过bottle模块,模板处理的时候也需要进行解码
4. smtp发送邮件,也需要进行编码
5. 最后foxmail客户端,就是我们的数据展示区,还需要对邮件内容进行解码
那么多个过程涉及编码,所以出现乱码,要冷静分析,看看数据处理的过程,分析出原因
要更深入了解乱码,首先你要能够随时制造编码错误
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb5 in position 2: invalid start byte UnicodeDecodeError: 'ascii' codec can't decode byte 0xb5 in position 2: ordinal not in range(128) 通过下面代码,制造错误 >>> a='as的' >>> print a as的 >>> print a.decode('utf-8') >>> print a.decode('ascii') >>> print a.decode('gbk') >>> print a.decode('gb2312') >>> print a.decode('cp936') -
没有评论:
发表评论