zoukankan      html  css  js  c++  java
  • 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码或字节码。    

     

  • 相关阅读:
    Spring源码情操陶冶-自定义节点的解析
    SpringMVC源码情操陶冶-DispatcherServlet
    springcloud config配置读取优先级
    Maven-常用插件
    springcloud情操陶冶-springcloud config server(三)
    springcloud情操陶冶-springcloud config server(二)
    springcloud情操陶冶-bootstrapContext(三)
    springcloud情操陶冶-springcloud config server(一)
    springcloud情操陶冶-bootstrapContext(二)
    springcloud情操陶冶-bootstrapContext(一)
  • 原文地址:https://www.cnblogs.com/solitarywares/p/10097954.html
Copyright © 2011-2022 走看看