Unicode、UTF-8的理解
来源:互联网 发布:informix数据库 编辑:程序博客网 时间:2024/06/05 19:46
计算机只能处理数字,那么对于人类的语言最终怎么输入计算机并且使用计算机存储和传输呢?我们只能对每个字符进行数字编码,这就是各个字符集存在的意义,如果地球上只有英文一种语言那么ASCII编码就足够了,但是对于亚洲这些象形文字,不是使用字母逻辑的排列组合生成的文字进行数字编码就比较麻烦了,对于汉字常用字大概是七万左右,而简体加繁体汉字大概有六七万个,对于ASCII编码只有一个字节的长度显然是不够的,所以为表示世界上大部分语言有过很多种字符集,字符集的不唯一这也是导致乱码的原因,可以想象如果世界上就一种字符集涵盖世界上人类语言的所有字符,那么乱码问题就会消除了,这就是Unicode字符集出现的原因,Unicode是很大的字符集,预计可以容纳100万个字符,比如“我”字对应“\u6211”,字母“A”对应“\u0041”。但是Unicode只是一个字符集,想象一下当你有一个文本文件,内部有各种字符,如果全部使用Unicode字符集的编码表示,内部会是什么样的呢?因为在Unicode字符集中比如“A”只需要占用一个字节就可以表示,而“我”字则需要两个字节表示,还有其他的语言有的会用三个字节四个字节。如果这些二进制混在一起我们是没办法分辨出来哪几个字节代表一个字符的,我们当然可以让所有字符都占用4个字节,这样每四个字节就是一个字符是可以表示的,但是有一个很大的问题就是会导致文件很大占用过多的存储空间,所以就出现了变长的utf-8编码。
utf-8的原理:
1.对于单字节的字符,则第一位为0,后面7位为Unicode的码,因此对于英文字符的ASSCII码和Unicode码是相同的。
2.对于n字节(n>1),第一个字节的前n位都为1,第n+1位全部为0,后面字节的前两位全部为10,剩下的没有被占用的位全部为这个字符的Unicode码。
下图选自http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
接下来以“我”为例:
“我”的Unicode码为0x6211属于第三行,占用三个字节,则UTF-8编码为
11100110 10001000 10010001,以上就是UTF-8的原理。
0 0
- unicode utf-8 的理解
- Unicode、UTF-8的理解
- Unicode与UTF-8的区别理解
- 对 Unicode、UTF-8 的一些理解
- 字符编码(UNICODE,UTF-8,UTF-16)的理解
- 简单的理解unicode和utf-8的关系
- 关于utf-8 unicode gbk的转换的理解
- 深入理解Python的字符编码utf-8 & unicode
- 码表的理解(ASCII,GBK,Unicode,UTF-8等)
- 统一码Unicode(UTF-8 UTF-16 GB18030等)的理解
- UTF-8、UTF-16、Unicode的区别
- Unicode/UTF-8的区别
- Unicode/UTF-8的区别
- Unicode&UTF-8的区别
- Unicode、UCS、UTF-8、UTF-16、UTF-32 的关系
- Unicode与UTF-8/UTF-16/UTF-32的区别
- Unicode与UTF-8/UTF-16/UTF-32的区别
- 对各种字符集和字符编码的理解(Ansi,GB2312,Unicode,UCS,utf 8)
- C语言中typedef和define的用法
- node.jsUDP协议转发程序
- “无法定位程序输入点_ZdaPvj于动态链接库Qt5Cored.dll”的解决办法
- 课程设计实训-2 学生成绩处理
- log4j配置参数详解——按日志文件大小、日期切分日志文件
- Unicode、UTF-8的理解
- Array(12) -- Longest Consecutive Sequence, First Missing Positive, Buy and Sell Stock III, Find Mini
- 证明的思路
- R调用mongo数据
- std::cout和std::endl是什么意思?
- Ubuntu下快速安装Docker&&快速安装Tensorflow方法
- android studio集成百度语音合成
- 在R语言中利用mice包进行缺失值的线性回归填补
- 算法训练 最小乘积(基本型)