Python编码问题

乱码根源:

  • 本地内存中编码方式都是“Unicode”,这是系统自动设定的!
  • 而在本地硬盘(保存到文件中)编码方式,是要设定的,而且为了“最高性价比”,多要设定为utf-8;
  • 网络中是各种各样的编码方式,拉取到本地,会自动“解释”为Unicode,在控制台输出,这些都还是在内存中;
  • 即使以UTF-8编码方式保存文件到本地,当读取的时候,本地也只会把文件当做基本的编码方式,如gbk,所以,仍然要编码为UTF-8,再交给本地自动转换为Unicode!

总结:

在计算机的世界,Unicode是“普通话”,其他的,像UTF-8、gbk什么的都是方言,而有的方言还解释不成普通话(因为有的方言,如gbk,太有“地方特色”,一些“俚语”在普通话里不能“写出来”,表达的含义,可意会不可言传 ),所以计算机会“说错话”,毕竟计算机还只是个机器,它只认普通话;同时,这个机器还蛮自动化的,会自动将方言转换为普通话,而在一些“认不出来”的情况下,就直接报错了,所以,如果出错的时候将自己想要讲的话转换(编译)为其它方言就行了,系统会再识别一次!


在Python中,有常用三套编码方式:

  • ASCII:一个字节(byte),也就是8个比特(二进制八位),只能代表128个英文字符
  • Unicode:两个字节(byte),及其特殊的会有三到四个,可以认为,这套编码方式包含了这个世界所有的字符
  • UTF-8 :可变长字节,也就是说,如果一个字符用一个字节就能表示(如英文),就用一个;而必须用三个字节才能表示(如中文)就用两个

三套编码方案的优缺点:

  • ASCII
    优点:比较节约资源,只用一个字节
    缺点:能表示的字符只有英文,所以其他国家人民就不能“说话了”!
  • Unicode
    优点:包含了这个世界上所有的字符(基本可以这么认为),每个人都有“说话的权利”
    缺点:太浪费资源,无论高矮胖瘦,都能装下,那这个“容器”就只能“将就”最高最胖的那个,所以“瘦子”就“节约”了好多空间 @_@
  • UTF-8
    优点:为每种语言“个性化定制”容器,性价比高,所以在网络传输中常用UTF-8
    缺点:。。。。。。

你可能感兴趣的:(Python编码问题)