快速理解编码,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的主要内容,如果未能解决你的问题,请参考以下文章
转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码