一, 字符编码
什么是字符编码?
人类在与计算机交互时, 用的都是人类能读懂的字符, 如中文字符, 英文字符, 日文字符等
而计算机只能识别二进制数.(二进制数就是由 0 和 1 组成的数字)
由人类的字符到计算机中的二进制数必须要经历一个过程
字符 ----> 翻译 ----> 数字
翻译的过程中翻译的过程必须参照一个特定的标准, 该标准称之为字符编码表, 该表上存放的
就是字符与数字一一对应的关系.
ASCII 表:
1, 只支持英文字符串
2, 采用 8 位二进制数对应一个英文字符串
GBK 表:
1, 支持英文字符, 中文字符
2,
采用 8 位 (8bit=1Bytes) 二进制数对应一个英文字符串
采用 16 位 (16bit=2Bytes) 二进制数对应一个中文字符串
- unicode(内存中统一使用 unicode):
- 1,
兼容万国字符
与万国字符都有对应关系
2,
采用 16 位 (16bit=2Bytes) 二进制数对应一个中文字符串
个别生僻会采用 4Bytes,8Bytes
unicode 表:
内存
人类的字符 ---------unicode 格式的数字 ----------
| |
| |
| |
硬盘 |
| |
| |
| |
GBK 格式的二进制 Shift-JIS 格式的二进制
老的字符编码都可以转换成 unicode, 但是不能通过 unicode 互转
utf-8:
英文 ->1Bytes
汉字 ->3Bytes
结论:
1, 内存固定使用 unicode, 我们可以改变的是存入硬盘采用格式
英文 + 汉字 -》unicode-》gbk
英文 + 日文 -》unicode-》shift-jis
万国字符》-unicode-》utf-8
2, 文本文件存取乱码问题
存乱了: 解决方法是, 编码格式应该设置成支持文件内字符串的格式
取乱了: 解决方法是, 文件是以什么编码格式存如硬盘的, 就应该以什么编码格式读入内存
3,python 解释器默认读文件的编码
python3 默认: utf-8
python2 默认: ASCII
指定文件头修改默认的编码:
在 py 文件的首行写:
coding:gbk
4, 保证运行 python 程序前两个阶段不乱码的核心法则:
指定文件头
coding: 文件当初存入硬盘时所采用的编码格式
5,
python3 的 str 类型默认直接存成 unicode 格式, 无论如何都不会乱码
保证 python2 的 str 类型不乱码
x=u'上'
6, 了解
python2 解释器有两种字符串类型: str,unicode
str 类型
x='上' # 字符串值会按照文件头指定的编码格式存入变量值的内存空间
unicode 类型
x=u'上' # 强制存成 unicode
来源: http://www.bubuko.com/infodetail-3458874.html