首页 > 编程语言 > 详细

python - 字符串编码

时间:2019-09-16 18:24:43      阅读:94      评论:0      收藏:0      [点我收藏+]

python 常用的编码类型:

    GB2312编码:主要用于汉字处理和汉字通信等系统的信息交互。
    ANSI(扩展的ASCII编码):主要是简体中文的交互(用一个字节表示英文,用两个字节表示一个中文)也叫GBK编码。
    GBK编码:主要用于对中文的编码。
    UTF-8编码:可以实现所有文字的编码,如日文、韩文。。。
    ASCII编码:主要是把英文字母,数字,标点,字符转换成计算机能识别的二进制数。(部分)
    Unicode编码:世界通用的,所有字符的编码。(全部)
 
python 版本之间编码的差异:
    py2.7 
    需要专门考虑中文字符的输出问题,字符串无法完全地支持国际字符集和Unicode编码,
    因为Python2中普通字符串实际上就是已经编码(非Unicode)的字节字符串,
    即str类型,转化为unicode需要进行解码(decode)
    py3.6
    所有的字符串默认已经是Unicode编码了,即unicode类型。
    如果你想使用非Unicode字符串,需要对字符串内容再做编码(encode),编码为你需要得编码格式,编码好的类型为 bytes 类型
    备注:
    因为Unicode把所有语言都统一到一套编码里,所以Python3几乎已经不需要考虑中文等字符不兼容得问题。
 
编码解码原则:
    原则1:用什么类型进行编码,就要用对应的进行解码
    原则2:unicode(str类型)-->encode-->bytes类型
                  bytes类型 -->decode-->unicode(str类型)
                  类型错误也是无法进行编码的
 
编码实际应用
     情景1:

    >>> s = ‘中国‘
    >>> s = s.encode(‘utf-8‘) # 这里用utf8进行编码,注意如果括号里面不写类型,那么会默认为是utf8

    >>> s.decode(‘utf-8‘) # 这里就要用utf8进行解码
    ‘中国‘

    >>> s1 = ‘中国‘.encode(‘gbk‘)
    >>> s1.decode(‘gbk‘)
    ‘中国‘

    情景2:
    在py文件中,头部往往都有 # -*- coding: utf-8 -*-; # -*- coding: gbk -*- :声明文件的解码格式
    那么在解码时,要用对应的类型进行解码,否则会报错
 
    情景3:
    保存文件的编码与解码不一致的情况
    技术分享图片
      技术分享图片

 

     报错一般是如下两种:

          1:SyntaxError: (unicode error) ‘utf-8‘ codec can‘t decode byte 0xc4 in position 0:invalid continuation byte  

          2:SyntaxError: encoding problem: gbk

 
总结:
  • 在计算机内存中,统一使用Unicode编码,如编程的时候
  • 当需要保存到硬盘或者需要传输的时候,统一是用bytes编码(如 utf8,GBK等)
  • 当读取文件时就是解码过程
  • 网页也是如此,浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器 (源码往往就有类似声明<meta charset="UTF-8" />)

python - 字符串编码

原文:https://www.cnblogs.com/su-sir/p/11525974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!