大家都知道jvm内部的字符都是unicode表示的,但是什么是unicode捏? 听我讲你知
早在很多年前国际标准化组织(ISO)那些伙计们就感觉ascII那200来个字符是不够用的
所以就想办法重新编码 以容纳全世界所有的字符
[b]办法是:用四个字节表示一个字符,这个编码称之为ISO-10646[/b]
你想啊 2的32次方 那字符老多了 有几百亿个吧 手指头多的可以数数 :lol:
这四个字节都有个名字
第一个字节:组(group)
第二个字节:面(plane)
第三个字节:行(row)
第四个字节:码(ceil)
但是有人就看ISO那帮伙计们不爽,就联合ms apple ibm sun等众兄弟另高了一套,取其名曰[b]unicode,unicode用2字节表示一个字符[/b]
众兄弟们很爽 :D :D
但是好景不长 ISO和unicode很快发现了问题:
初衷是要统一编码 到头来还是没统一啊,这不是白忙活了吗?
于是经过双方谈判 [color=red]unicode加入到ISO-10646的0组0面[/color]叫做基本多语言文字面(BMP)
就是说本来2个字节的unicode也变成了4个字节
而实际上用两个字节就能够表示出99%的常用字符,专家们当然发现了这个问题
于是出现了utf-16,utf是ucs/unicode transformation format的缩写
utf-16是这样表示的
[color=red]bmp字面的字符编码保持不变,即unicode的编码(两个字节)
其他字面的字符按照一定规则把32位转换成两个16位就ok啦
专家就是专家[/color]
注:按照一定规则的目的是避免跟bmp编码冲突(个人理解)
[b]但是问题总是一个接着一个[/b]
当时的计算机只能处理单字节数据流,怎么办呢? 这当然难不倒专家
于是乎 专家有重新[color=red]按照一定规则[/color]来编码
一个字节的utf-8表示 ascII
二个字节的utf-8表示 。。。
三个字节的utf-8表示 。。。
四个字节的utf-8表示 。。。
[b]一句话:无论是一个字节还是4个字节,通过专家们的规则肯定可以转换成ISO-10646编码,也就能够表示全世界的的任何字符了[/b]
参考《深入浅出mysql》
早在很多年前国际标准化组织(ISO)那些伙计们就感觉ascII那200来个字符是不够用的
所以就想办法重新编码 以容纳全世界所有的字符
[b]办法是:用四个字节表示一个字符,这个编码称之为ISO-10646[/b]
你想啊 2的32次方 那字符老多了 有几百亿个吧 手指头多的可以数数 :lol:
这四个字节都有个名字
第一个字节:组(group)
第二个字节:面(plane)
第三个字节:行(row)
第四个字节:码(ceil)
但是有人就看ISO那帮伙计们不爽,就联合ms apple ibm sun等众兄弟另高了一套,取其名曰[b]unicode,unicode用2字节表示一个字符[/b]
众兄弟们很爽 :D :D
但是好景不长 ISO和unicode很快发现了问题:
初衷是要统一编码 到头来还是没统一啊,这不是白忙活了吗?
于是经过双方谈判 [color=red]unicode加入到ISO-10646的0组0面[/color]叫做基本多语言文字面(BMP)
就是说本来2个字节的unicode也变成了4个字节
而实际上用两个字节就能够表示出99%的常用字符,专家们当然发现了这个问题
于是出现了utf-16,utf是ucs/unicode transformation format的缩写
utf-16是这样表示的
[color=red]bmp字面的字符编码保持不变,即unicode的编码(两个字节)
其他字面的字符按照一定规则把32位转换成两个16位就ok啦
专家就是专家[/color]
注:按照一定规则的目的是避免跟bmp编码冲突(个人理解)
[b]但是问题总是一个接着一个[/b]
当时的计算机只能处理单字节数据流,怎么办呢? 这当然难不倒专家
于是乎 专家有重新[color=red]按照一定规则[/color]来编码
一个字节的utf-8表示 ascII
二个字节的utf-8表示 。。。
三个字节的utf-8表示 。。。
四个字节的utf-8表示 。。。
[b]一句话:无论是一个字节还是4个字节,通过专家们的规则肯定可以转换成ISO-10646编码,也就能够表示全世界的的任何字符了[/b]
参考《深入浅出mysql》