【Python自学】03.字符串和编码(上)
2017-10-24 本文已影响0人
Raimond
打了鸡血,一天二更
之前也说过字符串是一种数据类型,但是它比较特殊,主要是因为编码问题。既然如此,先搞清楚下计算机编码的相关内容。
计算机编码
- 只处理数字,要处理文本就得先把文本转为数字才能处理。
- 早期设计 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再传输到浏览器
很多网页上的源码有类似<meta charset="UTF-8" />的信息,表示该网页正是用的 UTF-8 编码。
好多文字...基本上搬过来了,嘛,随便看看得了