快速理解编码,unicode与utf-8

Posted lshao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速理解编码,unicode与utf-8相关的知识,希望对你有一定的参考价值。

1.为什么编码,因为cpu只认识数字
2.ASCII 一个字符共占7位,用一个字节表示,共128个字符
3.那么ASCII浪费了最高位多可惜,出现了
ISO-8859-1,一个字节,256个字符,很多协议的默认编码
4.中文编码
GB2132 两个字节,大陆使用,表示约6k个字符
BIG5 两个字节,繁体字编码标准,共表示1.3w个字符
GBK 扩展了GB2132,能表示2w个汉字,不兼容BIG5

Unicode
又称万国码,源于一个组织,一共有两个组织,都是为了构建出一种能表示地球所有字符的编码,其中一个就是unicode,unicode是准确说是一个字符表,每个字符对应一个数字,称为码点,兼容ACSII,即a对应数字96,目前来说16位长度还未占满,所以有人说unicode字符占两个字节,这绝对是一种误解,unicode只是定义了哪个字符对应哪个数字,就这么简单。

java与unicode
java中为了存储字符时统一映射关系,存储与编码无关的unicode码点,不然一会存一个gbk字符,又来一个big5字符,连打印字符串都有问题了。

utf
那么unicode只是定义映射关系的话,具体怎么存储,用几个字节存呢
目前有ucs和utf两种思路。
utf-8 因为节省流量,互联网用的较多
用1,2,3,4个字节存储一个字符,通常来说英文字符一个字节,汉子三个字节
具体格式参考链接
uft16与bom
采用2.4字节存储,那么为了区分高字节在前还是在后,就需要在字节流前加特殊的BOM字节表示,utf8不需要bom,只是微软有这个习惯。

更加详细的描述推荐  https://www.cnblogs.com/leesf456/p/5317574.html

















以上是关于快速理解编码,unicode与utf-8的主要内容,如果未能解决你的问题,请参考以下文章

快速理解python2中的编码问题

快速理解Unicode和utf-8的本质

转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码

字符编码-深入理解ASCII,GB2312,GBK,Unicode,UTF-8

Python 编码转换与中文处理

python中的字符串编码问题——2.理解ASCII码ANSI码Unicode编码UTF-8编码