首页 > 代码库 > python ==> 字符编码

python ==> 字符编码

一:文本编辑器:

  python 解释器的三步骤:

   1.python解释器启动起来,放到内存里面。

   2.python解释器,从硬盘读取一个文件,把文件的内容全都当成普通字符,先读到内存里面。

   3.python解释器可以读一行就解释一行。

二:什么是字符编码?

  答:计算机要想工作必须通电,也就是说”电“驱使计算机干活,而”电“的特性,就是高低平。

    高电平:即 二进制数1.  低电平:即 二进制数0

    也就是说 计算机只认识 数字。

三:计算机编码的三个阶段。

阶段一:

  现代计算机起源于美国,最早诞生也是基于英文考虑的”ASCII”。

 ASCII:  1 Bytes == 8bit

      1KB==1024 Bytes

      1MB==1024 KB

      1GB== 1024MB

      1TB==1024 GB

      1GB= 1024*1024*1024

      8bit 可以表示为256个字符。

阶段二:

  为了满足中文,中国人定制了GBK。

  GBK: 以2Bytes 代表一个字符。 不止中国,为了满足其他国家,

    各个国家纷纷定制了自己的编码。

  日本: Shift_Jis   韩国:Eus-kr

阶段三:

  各国有各国的标准,就会有不可避免地出现冲突,结果就是,

  在多语言混合的文本中,显示出来会有乱码。

  于是产生了 unicode , 统一用了 2Bytes 代表一个字符。

  它以 2**16-1 = 65535 可代表6万多个字符,因而兼容万国语言。

  但是 对于都是英文文本而言,无疑多了一杯的存储空间。

  于是 产生了  utf-8, 对英文字符只用1Bytes,中文字符3Bytes。

需要强调的是:
  unicode: 简单粗暴,所有字符都是2Bytes,
  优点是字符-》数字的转换速度快,缺点是占用空间大。

  utf-8 : 精准, 对不同的字符用不同的长度表示。
  优点是:节省空间 。
  缺点是: 字符-》数字的转换速度慢,
  因为每次都要计算出字符需要多长的Bytes才能够精准表示

1.内存中使用的编码是 unicode .
用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快)

2.硬盘中或者网络传输用 utf-8,
网路I/O延迟 或 磁盘I/O延迟要远大于utf-8的转换延迟,
而且 I/O 应该是尽可能的节省带宽,保证数据传输的稳定性。

用什么格式编码 就要 用什么格式解码。
读的过程 是 unicode.
执行的过程 识别代码,开辟空间,形成其他的格式编码。

字符编码的使用:
文本编辑器:
内存:用unicode 格式的二进制
  ↑         ↓  

  ↑       ↓
读取文件:

decode           保存文件:

  ↑      encode
  ↑          ↓
硬盘:用utf-8格式的二进制

x = ‘钟’ :
换编码格式之后,没执行之前,并不会出现乱码。
执行后,会出现乱码报错,


1.python 2 默认的是 ASCII 字符串识别的代码:

1.str = bytes
2.‘u‘
unicode => encode(utf-8) 的结果bytes
unicode => decode(utf-8)===>unicode


2.python 3 默认文件编码的是 utf-8 字符串识别的代码 : unicode / bytes

 

为什么用bytes? 数据要想传输,一定要转成bytes。

第一步:python 解释器先执行,没问题
第二步:读取文件 有问题。
(读的时候并不知道编码格式是什么,只能用默认的,
这样一来就出错了)

打印到终端
一个程序 丢给 另一个程序。 一个内存空间到另外一个内存空间。
Windows 默认的编码是 GBK。

  

 

python ==> 字符编码