Python-字符编码

字符编码

什么是字符编码

字符是咱们人类可以读懂的字符,想让计算机读懂这些字符,必需要通过如下过程:编程

字符--》翻译过程--》数字(0101)编辑器

简而言之,字符编码就是将人类的字符翻译成计算机可以识别的数字,这种转换必须遵循一固定的标准,来表示字符与数字的对应关系,这个关系就是字符编码表性能

字符编码表发展与分类

  • 早期由美国人发明,称为ASCIl。规定了一些数字和一些特殊符号的对应关系.ASCIl最多只能表示256个符号,也就是256个对应关系编码

早期用英文编程没问题,ASCIl码够用,可是中国、韩国、日本也有本身的语言若是这时候还来用ASCIL码来编码各个国家的字符的时候就不能找到对应的关系了,就会出现乱码的状况。翻译

因而,各个国家发明了他们属于本身的编码code

中国 gb23十二、gbkorm

韩国 euc-krblog

日本 shift内存

再读取字符的时候按照各个国家的编码标准会出现乱码(由于此刻的各类标准都只是规定了本身国家的文字在内的字符跟数字的对应关系,若是单纯采用一种国家的编码格式,那么其他国家语言的文字在解析时就会出现乱码)。因此迫切须要一个世界的标准(能包含全世界的语言)

  • Unicode应运而生。unicode的对应关系更多,表示着存储的字符会更多,占用内存会更大,在存储和传输上十分的低效。

后来出现了把Unicode编码转化为“可变长编码”的UTF-8(Unicode Transformation Format-8)编码。uft8占用内存更小,更适合存储数据。

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101
  • 读入内存利用unicode编码

字符编码应用之Python

执行python程序的三个阶段

  • 启动python解释器

    此时python解释器就至关于一个纯文本编辑器,默认是utf8编码编写字符

  • 读代码

    文本编辑器从硬盘中读取内容默认使用utf8编码格式读取,若是不是utf8写的字符读取的时候则会乱码

    也能够指定python解释器读取内容的编码是什么格式# coding=gbk,这样python解释器就以gbk格式读取,以gbk写的字符就不会出现乱码了。

    加载到内存默认使用unicode编码格式

  • 执行,产生结果

    执行过程当中会在内存中开辟新的内存空间

python2 与 python3 字符串类型的区别

Python2

  • str

    当python执行到产生字符串的代码时,将字符串编码成文件开头指定的编码格式

  • Unicode

    当python执行到产生字符串的代码时,在变量值前面加上u表示用unicode编码格式

Python3

Python3中字符串类型都是Unicode编码的,因此Python3中的字符串类型的数据能够编码成其余字符编码的格式。

在Python3中不管指定了什么字符编码,在内存存取时都会使用Unicode编码去入内存,Unicode编码能够和任意的字符编码相互转换,并在读取时按照所需的编码区读取,这样就很好解决了字符编码的问题

总结

字符按照什么标准而编码的,就要按照什么标准解码

(按照什么方式存的,就按什么方式取就不会乱码)

  1. 为了处理英文字符,产生了ASCII码。

  2. 为了处理中文字符,产生了GB2312。

  3. 为了处理各国字符,产生了Unicode。

  4. 为了提升Unicode存储和传输性能,产生了UTF-8,它是Unicode的一种实现形式。

运行环境的影响

搞清楚了上面介绍的各类编码格式以后,接下来咱们就开始详细讲解为何会出现乱码了。关于乱码,你们记住两个要点:

(1)所谓乱码的本质是字符的编码格式与显示字符的环境编码格式不一致引发的。这句话告诉咱们要解决乱码问题,咱们须要知道两个信息,一个是字符自己是什么编码,另外一个就是显示字符的环境编码是什么,二者必须一致,才能显示出正确的内容。

(2)因为Unicode编码是标准编码格式,也能够看作是没有任何特定编码格式的“无编码”模式。因此,对于任何Unicode类型编码的字符,打印时python会自动根据环境编码转为特定编码后再显示。

相关文章
相关标签/搜索