编码

  • 编码的种类
    • ASCII:占1个字节,只支持英文
    • GB2312:占2个字节,支持6700+汉字
    • GBK:GB2312的升级版,支持2100+汉字
    • Shift+JIS:日本字符
    • ks_c_5601-1987:韩国编码
    • TIS-620:泰国编码
    • unicode:2-4个字节,万国码,涵盖了全球所有文字和二进制的对应关系
      • 直接支持全球所有语言,每个国家都可以不用再使用自己之前的旧编码,用unicode就可以了。(跟英语是全球通用语言一样)
      • 不同国家的字符都可在unicode中找到映射关系,相互转换
      • 至少使用2个字节,对英文字符这类的,比ASCII多用一倍的内存,浪费空间,因此有了UTF编码
    • UTF
      • UTF-8:使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个
      • UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。
      • UTF-32: 使用4个字节表示所有字符;
      • 总结:UTF 是为unicode编码 设计 的一种 在存储 和传输时节省空间的编码方案。
  • 编码的转换
    • 解码,编码:GBK和utf-8之间的转换,先将GKB格式解码成unicode,再将unicode编码成utf-8
    • 所有的软件,编程语言都默认支持unicode,那你的gbk软件放到美国人的电脑上,加载到内存里,变成了unicode,中文就可以正常展示了。
  • python2
    • 内存中字符默认编码是ASCII,默认文件编码也是ASCII
    • 当声明了文件头的编码后,字符串的编码就按文件编码来,总之,文件编码是什么,那py2的str就是什么编码
    • python2中的unicode是一个单独的类型,用u'路飞'来表示
    • python2 str == bytes,bytes直接是按字符编码存成的2进制格式存在内存里,通常用bytes表示图片、视频等二进制格式的数据
    • 以utf-8编码的字符串,在windows上不能显示
    • 如何在python2实现写一个软件,在全球各国电脑上,直接看?
      • 以unicode编码写你的软件
  • python3
    • 字符串都是unicode,str = unicode,只有str类型,没有单独的unicode类型
    • 文件编码默认是utf-8,读到内存会被python解释器自动转成unicode
    • bytes与str做了明确区分
    • 所有的unicode字符编码后都会变成bytes格式
  • 文件头
    • python2:以utf-8 or gbk..编码的代码,代码内容加载到内存,并不会被转成unicode,编码依然是utf-8 or gbk...
    • python3:以utf-8 or gbk..编码的代码,代码内容加载到内存,会被自动转成unicode
  • 常见编码错误
    • python解释器的默认编码
    • python源文件文件编码
    • Terminal使用的编码
    • 操作系统的语言设置
原文地址:https://www.cnblogs.com/GraceZ/p/7854178.html