在编程中碰到乱码是经常发生的事情,今天特地抽出时间弄懂这个编码,填补这个大坑。
简单说点个人感受,计算机技术的发展都是有因有果,存在的就是合理的,新技术的更新迭代肯定是为了弥补旧技术的不足
今天就用简单的因果关系来阐述一下我对编码的认识
————————————————————————————————————————————————————————
1.为了处理英文字符,产生了Ascii编码(American Standard Code fro Information Interchange)
0-31,127是控制字符
32-126是可显示字符
Ascii码在128-255之间的被称为扩展的Ascii码
2.为了处理中文字符,在Ascii编码的基础上产生了Gb2312编码(表示6000多个汉字)
由于汉字太多了包括繁体和各种字符,产生量GBK编码(包括Gb2312)
由于中国是个多民族国家,为了表示各个民族的字符,把GBK编码扩展成为GB18030编码
汉字的这些编码都属于双字节字符集
3.为了处理各国的字符,产生了Unicode编码(统一码,万国码),规定所有的字符由最少两个字节来处理
为了提高Unicode的传输和存储出现了两个标准UTF-8和UTF-16
每次分别传输8位和16位,是unicode的一种实现形式
UTF-8编码是对Unicode编码的压缩和优化,将所有的字符进行分类:Ascii码中的内容用一个字节保存
欧洲的字符用两个字节保存,东亚的字符用3个字节保存
unicode编码向下兼容gb2312 gbk编码
4.总结:编码的发展过程说明了一个道理:合久必分,分久必合
下图是gbk和utf-8转换的过程