python 字符串内容

一、介绍python 2和python 3中的字符串类型及用途

   python 2
    str
      简单文本(如ascii编码)和二进制数据(bytes)。
    unicode
      多字节文本(宽字符,如中文)。

  python 3
    str
      unicode文本,包含ascii、utf-8等。
    bytes
      字节,用于二进制数据表示,在一些需要低级数据结构的时候用到,譬如C语言等。
    bytearray
      bytes类型的一个变体,它是可变的并且支持原处修改。

二、字符编码解码的基础知识及在python中的使用

  编解码
    编码:
      根据一个想要的编码名称,把一个字符串翻译为其原始字节形式。
    解码:
      根据其编码名称,把一个原始字节串翻译为字符串形式的过程。

  python 2中编解码对象的转换关系
          decode               encode
    str ---------> unicode --------->str

    示例:
      s = '北京'
      s.decode('gb2312')
      s.decode('gb2312').encode(encoding='utf-8',errors='strict')

  python 3中编解码对象的转换关系
       decode       encode
    bytes ------> str(unicode)------>bytes

    示例:
      s = '北京'
      s.encode()
      b'xe5x8cx97xe4xbaxac' #为转义字符,x为十六进制的标记,u为unicode
      s.encode().decode()

  查看对象或平台的编码环境
    1)检查python默认的编码
          import sys
          sys.getdefaultencoding()
       reload(sys)
          sys.setdefaultencoding('utf8')
    2)检查字符对象的编码,这个模块识别不准,可以参考链接
       https://blog.csdn.net/u013314786/article/details/77931548
       import chardet
       print chardet.detect(html)
         识别模块不太准的时候,可以使用decode采用一些常用的中文编码进行解码,如GBK,GB2312等。

三、python 2和python 3在字符串使用的上的一些区别

  1)python 3默认采用utf-8的字符集,而python 2默认采用ascii的编码方式。
  2)python 2中存在str和unicode类型,python 3分为bytes和str类型。
  3)python 2的str类型可以表示二进制和字符串数据,而python 3中进行了区分
  4)python 2和3版本中的编解码转换规则不太一样
    python 2中进行编码转换,必须先转换为unicode对象
    python 3由于本身就值unicode,所以可直接进行转换编码
  5)文件读取

python 2
读取文件时,采用r和rb读取文件文件时,无区别。
读取文件时,直接读取字节再通过ascii解码,如果包含非ascii字符的打印为直接。
read方法输出指定字节数。

python 3
读取文本文件时,采用r和rb模式读取输出是不同的,rb输出字节,r输出字符。
读取时采用utf-8进行解码读取。
read方法输出字符数。

四、相关知识点

1)字节顺序标记BOM
   例如,在UTF-16和UTF-32编码中,BOM指定大尾还是小尾格式(基本上,是确定一个位字符串的哪一端最重要)。
      处理BOM的方法
           在文件进行写入和读取时使用具体编码名来处理BOM,如下:
      >>> open('spam.txt', 'r', encoding='utf-8-sig').read()
        'spam SPAM ' #使用具体的编码名处理BOM

2)转换编码
  我们总是可以把一个字符串转换为不同于源字符集默认的一种编码,但是,我们必须显式地提供一个编码名称以进行编码和解码:
  >>>S = 'AÄBèC'
  >>>S.encode() # Default utf-8 encoding
    b'Axc3x84Bxc3xa8C'
  >>>T = S.encode('cp500') #转换为cp500编码

3)源文件字符集编码声明
  改变默认的文件编码形式,在文件的第一或第二行声明。
  # -*- coding: latin-1 -*-

 

重点提示:

  1、数据分层表示方法。

     文件层面:                 字节序列,可分为各类编码形式的字节序列,如unicode,base64,自定义的字节流。

     python脚本文件层面:  字符序列,自动执行编码/解码操作。

     python解释器内存层面:unicode码或字节码。    

 

原文地址:https://www.cnblogs.com/solitarywares/p/10097954.html