【Python自学】03.字符串和编码(上)

打了鸡血,一天二更
     

动态图尝试上传ing

   之前也说过字符串是一种数据类型,但是它比较特殊,主要是因为编码问题。既然如此,先搞清楚下计算机编码的相关内容。

计算机编码

  • 只处理数字,要处理文本就得先把文本转为数字才能处理。
  • 早期设计 8 bit 表示一个字节,一字节表示最大整数 11111111=十进制255
  • 两字节可表示最大65535,四字节4294967295
  • 世界上有上百种语言,不同的国家可能有不同的标准,例如 ASCII 和 GB

ASCII编码:

美国人最早只把127个字母编码进计算机去,大小写英文字母、数字和符号。例如大写 A 编码 65,小写 z 编码是122。

GB2312编码:

我国为了计算机处理中文(需要至少两个字节),创建的一种与 ASCII 编码不冲突的编码。

Unicode标准/编码

因为各国标准不一,创的编码也许完全不同,所以会不可避免地出现冲突,结果就是在多语言混合的文本当中,显示出来一堆的乱码。于是乎,Unicode标准就是在此时应运而生,将所有语言统一到一套编码里面。

  • 常用两个字节表示一个字符,非常偏僻的字符用上 4 个
  • 现代大多数操作系统和编程语言都支持该编码

ASCII与Unicode的区别:

  • ASCII编码是 1 字节,而Unicode通常是2字节
  • ASCII编码中,A 是十进制的65(010000001),字符 0 是十进制的48(00110000)(注意‘0’和0不同)。汉字已经超出 ASCII 编码范围,而 Unicode 的十进制是20013(01001110 00101101)
  • 如果要将 ASCII 编码中的 A 改为 Unicode 编码,前面补 0 即可:00000000 01000001

UTF-8编码:

  • 如果全是用 Unicode 编码,乱码解决了,但是写的文本全英,用 Unicode 编码比 ASCII 编码需要多一倍的存储空间,在存储和传输上就非常不划算。于是乎节约版“可变长编码”UTF-8又横空出世。
  • 把 Unicode 字符根据不同数字大小编写成 1-6 个字节:    
      常用英文字幕编成1字节
    汉字通常编写成3个字节,很生僻的字符编写成 4-6 个字节
  • 优点:
      如果传输的文本包含大量英文字符,将节省大部分空间
      大量支持 ASCII 编码的历史遗留软件可以在 UTF-8 编码下继续工作。

目前计算机系统通用的字符编码工作方式

  • 在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者传输的时候就转换成为 UTF-8 编码。
  • 使用笔记本编辑时:
               
    读取时UTF-8转换成Unicode,保存时相反
  • 浏览器:
              
    浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器

      很多网页上的源码有类似的信息,表示该网页正是用的 UTF-8 编码。

好多文字...基本上搬过来了,嘛,随便看看得了
  

反正又没有说要考试

你可能感兴趣的:(【Python自学】03.字符串和编码(上))