深入浅出unicode

深入浅出unicode大家都知道jvm内部的字符都是unicode表示的,但是什么是unicode捏? 听我讲你知

早在很多年前国际标准化组织(ISO)那些伙计们就感觉ascII那200来个字符是不够用的
所以就想办法重新编码 以容纳全世界所有的字符

办法是:用四个字节表示一个字符,这个编码称之为ISO-10646
你想啊 2的32次方 那字符老多了 有几百亿个吧 手指头多的可以数数
这四个字节都有个名字
第一个字节:组(group)
第二个字节:面(plane)
第三个字节:行(row)
第四个字节:码(ceil)

但是有人就看ISO那帮伙计们不爽,就联合ms apple ibm sun等众兄弟另高了一套,取其名曰unicode,unicode用2字节表示一个字符
众兄弟们很爽

但是好景不长 ISO和unicode很快发现了问题:
初衷是要统一编码 到头来还是没统一啊,这不是白忙活了吗?

于是经过双方谈判 unicode加入到ISO-10646的0组0面叫做基本多语言文字面(BMP)
就是说本来2个字节的unicode也变成了4个字节
而实际上用两个字节就能够表示出99%的常用字符,专家们当然发现了这个问题
于是出现了utf-16,utf是ucs/unicode transformation format的缩写
utf-16是这样表示的
bmp字面的字符编码保持不变,即unicode的编码(两个字节)
其他字面的字符按照一定规则把32位转换成两个16位就ok啦
专家就是专家
注:按照一定规则的目的是避免跟bmp编码冲突(个人理解)

但是问题总是一个接着一个
当时的计算机只能处理单字节数据流,怎么办呢? 这当然难不倒专家
于是乎 专家有重新按照一定规则来编码
一个字节的utf-8表示 ascII
二个字节的utf-8表示 。。。
三个字节的utf-8表示 。。。
四个字节的utf-8表示 。。。
一句话:无论是一个字节还是4个字节,通过专家们的规则肯定可以转换成ISO-10646编码,也就能够表示全世界的的任何字符了

参考《深入浅出mysql》
原文地址:https://www.cnblogs.com/danghuijian/p/4400763.html