彻底搞清楚unicode和utf8编码
1、计算机只能处理数字(0和1),文本转换为数字才能处理。计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255
2、计算机是美国人发明的,所以一个字节可以表示所有字符了,所以ASCII(一个字节)编码就成为美国人的标准编码
3、但是ASCII处理中文明显是不够的,中文不止255个汉字,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312还把ASCII包含进去了。同理,日文,韩文等上百个国家为了解决这个问题就 都发展了一套字节的编码,标准就越来越多,如果出现多种语言混合显示就一定会出现乱码
4、于是,unicode出现了,将所有语言统一到一套编码里
5、看一下ASCII和unicode编码:
(1)字母A用ASCII编码十进制是65,二进制是0100 0001
(2)汉字“中”已经超过了ASCII编码的范围,用unicode编码是2013,二进制是01001110 00101101
(3)A用unicode编码只需要在前面补0,二进制是00000000 0100 0001
6、乱码问题解决了,但是如果内容全是英文,unicode编码比ASCII需要多一倍的存储空间,同时如果传输传输需要多一倍的传输。
7、所以出现了可变长的编码"utf-8",把英文变长一个字节,汉字3个字节。特别生僻的变成4-6个字节,如果传输大量的英文,utf8作用就很明显了
总结:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器。
所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。
相关文章
- Java实现 LeetCode 820 单词的压缩编码(字典树)
- 使用escape编码地址栏中的中文字符
- (虽然是转的,很希望给大家看)分析中文编码问题
- Android高效率编码-细节,控件,架包,功能,工具,开源汇总,你想要的这里都有
- 在JavaScript中使用json.js:访问JSON编码的某个值
- 在JavaScript中使用json.js:使得js数组转为JSON编码
- intellij idea(2019.2):安装阿里编码规约(代码规范)插件及使用
- iOS音视频开发九:视频封装,采集编码 H.264/H.265 并封装 MP4
- 学习Spring Boot:(十五)使用Lombok来优雅的编码
- 最牛B的编码套路
- 逆向——字符与字符串,中文字符GB2312编码由来
- 海思Hi3531A 如何实时观看摄像头VENC编码后的视频