Python字符串和编码(三)
2016-08-17 本文已影响0人
chensiyu2014
字符编码
- 计算机由于是美国人发明,因此只有127个字母编码到计算机里,也就是大小写英文字母、数字和一些符号。该表又称为ASCII编码
- 中国制定了GB2312编码来进行中文的编进
- 由于各个国家的编码复杂性,Unicode应运而生,Unicode将所有的语言都统一到一套编码里面,这样就不会在有乱码出现。
- ASCII编码和Unicode编码的区别是:ASCII编码是1个字节,而Unicode是通常是2个字节。
- 尽管Unicode将编码统一了,乱码问题消失了,但是如果基本都是英文的话,用Unicode编码要比ASCII编码多一倍的存储空间,在存储和传输上是否不划算;因此又出现了降Unicode编码转化为“可变成编码”UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码为1个字节,汉字通常是3个字节,只有很生僻的才编码为4-6个字节。
- 现在计算机系统通用的字符编码工作:在计算机内存中统一使用Unicode,而需要保存到硬盘或者传输的时候,就转换为UTF-8编码;
- 关系例子
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
A | 0100000 | 000000001000001 | 01000001 |
中 | x | 01001110 00101101 | 11100100 10111000 10101101 |
Python字符串
- 在最新的Python3版本中,字符串是以Unicode编码的,因此Python支持多种语言
- 对于单个字符的编码,Python提供了
ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符 - Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节,如果要传输或者保存,需要将str转换为字节为单位
bytes
;对于bytes
类型数据用带b前缀的单引号或双印好表示 - Pyhont提供
encode
和decode
l两种方式进行字符编码的转换 -
len()
函数计算str是字符数,计算bytes则为字节数 - 为了避免乱码问题,应当时钟坚持使用UTF-8编码对str和bytes转换
格式化
- Python的格式化方式和C语言保持一致用
%
实现 - 字符串里面的
%
是一个普通的字符则需要转移用%%
来表示%
总结
牢记采用UTF-8来编码,乱码将不再是问题,了解了ASCII、Unicode以及UTF-8的历史不错