目录
字符编码
字符(存储了信息的东西)编码()
键盘 发送的是电流 --> 主机(内存)接收到电流(当作01010101010) --》 显示屏 接收电流(当作01010101010 --》键盘)
编码: 01010101010 --》 键盘
文本编辑器存储信息的过程
文本编辑器 --》 写文本 --》 存储信息
显示屏(内存) --》(转换)硬盘
中文 --》 00101101001010
english -》 111110000
手纸 -》 00000011111
早期 美国人 才用计算机
0 -> a
1 -> b
0001 --> a
0011 --> b
...
1111 --> w
0000 0000 -> a
ascii编码 --》 美国人
# acill编码的转换关系的方法
print(chr(65))
print(ord('a'))
日本要用计算机,韩国也要用计算机,中国也要用计算机
日本人也造一种编码 --》 shit
0001 --> a
0010 --> b
韩国人也造一种编码 --》 fuck
0001 -> c
0010 -> d
中国人也造一种编码 --》gb2312
德国 --》bitch
000010 苍(日文) 000010 汫(中文)
我要在韩国人的电脑上写日文(0001 0010 --> ab) --> 韩国(0001 0010 --> cd) ---》 以前看片的乱码现象
早期,各个国家只能使用各个国家的计算机 --》 天下大势分久必合,合久必分
这个时候就出现了unicode编码(一种对应关系)
unicode可以认识万国编码
硬盘中无论躺着什么格式的编码文件,unicode都可以识别,假设你看日本的片子,从硬盘中读取fuck编码,然后unicode识别,unicode帮你转换成gb2312,解决了乱码的问题,用unicode存
都用unicode取,又用unicode存,以后写代码只能写Unicode --》 以后全世界的代码都是unicode
unicode存的时候多占用空间,所以出现了utf8(只和unicode一一对应)--》解决了unicode内存占用的问题
在所有的电脑都是这样的 --》 内存中unicode取,存用utf8存(硬盘),全世界的人写代码/写文件都是用utf8
内存中为什么不用utf8?utf8和gb2312/fuck都没有转换关系,因此内存都要用unicode
未来迟早有一天,内存要用utf8
gb2312和gbk的区别
先能用就行,不常用的词+繁体字
gb2312 --》 常用词
gbk --》 所有字
windows系统的记事本默认编码 是 gbk,除此之外都是utf8
用什么编码写,就用什么编码读
写用utf8,存用utf8,读用gbk--》乱码
写用utf8,存用gbk,--》乱码 ,读用 --》除非你找日文编码,放入中文 の(中文的一个符号,不是日文的“的”)
编码和解码
unicode编码 ---》(编码) utf8 从内存到硬盘
utf8 --》(解码) unicode 从硬盘到内存
现在内存只有unicode编码
python2和python3的编码区别
python2
python2有两种存储变量的形式,第一种:unicode;第二种:utf8
假设python2用utf8存储x='中文'
,当你print(x)
的时候,终端接收utf8的变量x,但是windows终端编码是gbk,会乱码
假设python2用unicode存储,终端接受的是unicode,windows终端编码是utf8还是gbk重要吗?不会乱码=
# coding:gbk
lt1 = '中文' # utf存储的
# lt1 = ['中文'] # []让他不用终端的编码转化,显示01010101001
print lt1 # ['\xe4\xb8\xad\xe6\x96\x87']
lt2 = u'中文' # u'中文'让他变成unicode # 早期用python2定义中文,必须得加上u,让他变成unicode存储
# lt2 = [u'中文']
print lt2 # '中文'
python3
python3只有一种存储变量的形式,unicode
python3用unicode存储,终端接收的是unicode,widonws终端编码是utf还是gbk不重要,不会乱码
lt1 = '中文' # == u'中文'
print(lt1)