Python的编码问题

一、编码的几种常用种类

  1. ASCII编码
  2. GBK编码
  3. Unicode编码

 二、编码的区别

  1. ASCII编码

    •   ASCII(美国标准信息交换代码),主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
  2. GBK编码

    • GBK(汉字编码国家标准),GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字,对汉字采用双字节编码。  
  3. Unicode编码

    • Unicode(国际标准字符集),它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536。
    • unicode 只是一种字符码表, 而在计算机中进行存储时, 必须指定一种具体的存储方式。常见的如utf8, utf16, utf32。因为windows中,默认的unicode编码方式就是utf16, 所以英文字符才是两个字节。
  4. UTF-8

    • UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
    • 这样做的目的解决了资源浪费。

三、编码的使用

文件以什么方式保存的就以什么方式打开。

四、Python中的应用

  1.  在python2中,python解释器默认使用ASCII编码
  2. 在pythoh3中,pythin的解释器默认使用utf-8编码
  3. 这就是为何有的文章开头加了一句# -*- coding: utf-8 -*-(解释器以utf-8执行文件)

五、举例

  1. python2中有两种字符串类型str和unicode

    • 随着python3的流行,这里就不作解释
  2. python3中有两种字符串类型str和bytes

    • 1 s1 = "Hello world!"
      2 s2 = b"Hello world!"
      3 print(type(s1))     #<class 'str'>
      4 print(type(s2))     #<class 'bytes'>
      5 print(s1)           #Hello world!
      6 print(s2)           #b'Hello world!'
      #utf-8对于纯英文是以一个字节表示,所有进行编码后还能显示“Hello word!”
    • 1 s1 = "Hello world!"
      2 s2 = s1.encode("utf-8")
      3 print(type(s2))     #<class 'bytes'>
      4 print(s2)           #b'Hello world!'
      #通过encode可以对str进行转换成bytes
    • 1 s1 = "你好,世界!"
      2 s2 = s1.encode("utf-8")
      3 print(type(s2))         #<class 'bytes'>
      4 print(len(s2))          #18
      5 print(s2)               #b'xe4xbdxa0xe5xa5xbdxefxbcx8cxe4xb8x96xe7x95x8cxefxbcx81'
      # 在 bytes 中,无法显示为 ASCII 字符的字节,用x##显示
      #len(s2),当s2为bytes类型时,len表示的是字节数,utf-8中,一个字符用3个字节表示
 
原文地址:https://www.cnblogs.com/lilong74/p/11286491.html