UTF-8、UTF-16、Unicode的区别
2015-06-02 15:16
288 查看
看了很多网上的总结,我捞出来最干的部分罗列在这里,希望对大家有帮助
字符集是指字符的集合,例如所有的英文字母是字符集,所有的汉字也是字符集,全世界所有语言的符号都放在一起,也可以称为一个字符集,字符集中的字符没有顺序之分,在给字符集合中的每个字符都分配一个整数编号之后,这个字符集就有了顺序,成为编码字符集。同时,根据这个编号可以唯一确定字符集中的某个字符。当然对于同一个字符,不同的编码字符集所指定的整数编号也不尽相同,例如“儿”字,在Unicode中,它的编号是0x513F(为方便起见以十六进制表示,但这个整数编号并不要求必须以十六进制表示),表示它是编码字符集Unicode中的第0x513F个字符。而在编码字符集Big5中,它就是第0xA449个字符了。许多字符在不同的编码字符集中被分配了相同的整数编号,如英文字母“A”在ASCII和Unicode中都是第0x41个字符。需要注意的是,编码字符集中字符被分配的整数编号,不一定就是该字符在计算机中存储时所用的值,计算机中存储的字符到底使用什么二进制整数值来表示,是由编码方式决定的。
一般不用二进制来表示某个字符的编码(因为不便于书写和阅读),一般采用十六进制来表示某个字符的编码。
编码方式决定了如何将一个字符的整数编码对应到一个二进制数,有的编码方式直接将该整数编码转换为二进制数存储在计算机中(如英文字符),几乎所有的编码方式中,英文字母的整数编码都与其在计算机内存储的二进制数一致。但有的编码方式,例如适用于Unicode字符集的UTF-8编码形式,就将很大一部分字符的整数编码作了变换后再存储在计算机中。以“汉”为例,“汉”的Unicode编码为6C49,但其UTF-8编码为E6B189(变成了三个字节,表示汉”是编码字符集Unicode中的第6C49个字符,将该整数编号6C49以编码方式UTF-8编码为二进制后得到E6B189)。另一种编码方式UTF-16对Unicode中的前65536个字符的编码均不做变换,直接作为计算机存储时使用的值(对65536以后的字符,仍然要做变换),如“汉”的Unicode编码为6C49,经过编码方式UTF-16编码后存储在计算机上时,它的编码仍是6C49。正是因为UTF-16的存在,使得很多人认为Unicode是一种编码方式(实际上Unicode是一种编码字符集),也因此很多人说Unicode的时候,实际上指的是UTF-16(再重申一遍,Unicode是编码方式,UTF-16是字符集,虽然内存中两者的表示方式刚好一样,但完全不是一种东西)
字符集是指字符的集合,例如所有的英文字母是字符集,所有的汉字也是字符集,全世界所有语言的符号都放在一起,也可以称为一个字符集,字符集中的字符没有顺序之分,在给字符集合中的每个字符都分配一个整数编号之后,这个字符集就有了顺序,成为编码字符集。同时,根据这个编号可以唯一确定字符集中的某个字符。当然对于同一个字符,不同的编码字符集所指定的整数编号也不尽相同,例如“儿”字,在Unicode中,它的编号是0x513F(为方便起见以十六进制表示,但这个整数编号并不要求必须以十六进制表示),表示它是编码字符集Unicode中的第0x513F个字符。而在编码字符集Big5中,它就是第0xA449个字符了。许多字符在不同的编码字符集中被分配了相同的整数编号,如英文字母“A”在ASCII和Unicode中都是第0x41个字符。需要注意的是,编码字符集中字符被分配的整数编号,不一定就是该字符在计算机中存储时所用的值,计算机中存储的字符到底使用什么二进制整数值来表示,是由编码方式决定的。
一般不用二进制来表示某个字符的编码(因为不便于书写和阅读),一般采用十六进制来表示某个字符的编码。
编码方式决定了如何将一个字符的整数编码对应到一个二进制数,有的编码方式直接将该整数编码转换为二进制数存储在计算机中(如英文字符),几乎所有的编码方式中,英文字母的整数编码都与其在计算机内存储的二进制数一致。但有的编码方式,例如适用于Unicode字符集的UTF-8编码形式,就将很大一部分字符的整数编码作了变换后再存储在计算机中。以“汉”为例,“汉”的Unicode编码为6C49,但其UTF-8编码为E6B189(变成了三个字节,表示汉”是编码字符集Unicode中的第6C49个字符,将该整数编号6C49以编码方式UTF-8编码为二进制后得到E6B189)。另一种编码方式UTF-16对Unicode中的前65536个字符的编码均不做变换,直接作为计算机存储时使用的值(对65536以后的字符,仍然要做变换),如“汉”的Unicode编码为6C49,经过编码方式UTF-16编码后存储在计算机上时,它的编码仍是6C49。正是因为UTF-16的存在,使得很多人认为Unicode是一种编码方式(实际上Unicode是一种编码字符集),也因此很多人说Unicode的时候,实际上指的是UTF-16(再重申一遍,Unicode是编码方式,UTF-16是字符集,虽然内存中两者的表示方式刚好一样,但完全不是一种东西)
相关文章推荐
- linux下安装boost
- java的访问权限修饰符
- imageloader 简单应用
- js 数组对象的操作方法
- 活动倒计时,还没拿到免费序列号的快来啊!
- Lightmapping使用及动态加载lightmap方案
- QTCreator快捷键
- hadoop学习笔记(三)——WIN7+eclipse+hadoop2.5.2部署
- [学习记录]判断设备是否IOS7
- 【趋势科技实习录】UI添加滚动条
- eclipse下切换svn用户 (换用户登录)
- Bat 循環執行範例
- 一个北漂来到北京一年多的亲身感受
- 数据库名,数据库实例名SID,数据库服务名,全局数据库名
- “git add -A” 与 “git add .”的区别
- HDU 1599 find the mincost route(Floyd最小环)
- 数据库完整性约束
- resizeTo()和resizeBy()方法
- js判断undefined类型
- C#中使用不安全代码