参考文章:彻底弄懂 Unicode 编码
1.什么是unicode
unicode是美国为了统一世界语言编码问题,把第一个字符用一个数字来代替,
比如指定10进制数值:25105,是对应字符"我"
2.unicode到底有多少个字符、什么是BMP
为了方便程序存储,unicode以2个字节为一个平面,2个字节是16bit,即2^16=65536,总共分了17个平面,共17 * 65536 = 1114112个字符
BMP又是什么?
因为unicode刚提出来的时候,用2个字节,65536个字符就能满足全世界所有国家的基本字符要求,所以
规定第1~65536个字符为第0个区间,即BMP(Basic Multilingual Plane),其它区间的字符也随着时间慢慢增加(也可能直接加在BMP里,因为65536个字符应该不是一次就用完)
3.utf-8、utf-16又是什么
既然unicode规定字符对应的数值,那程序里要怎么表示呢?
当然,为了简单起见直接用int型的数值对应unicode的数值不就好了,用一个4字节的int数值就能对应所有的unicode字符!
然而,直接用4字节来表示一个unicode字符虽然简单,但是会造成存储空间的极大浪费,就比如英文字符,其实只要一个字节存储就够了,
BMP只要2个字节存储就够了,因此就产生了各种为节省存储空间、兼容旧系统产生的编码。
其中,utf-8因为能够兼容ascii码,而被大众普通接受,现在是最流行的一种unicode编码方案
4.java中的char
java中的char用2个字节来表示,所以能够表示BMP的所有字符,char里存储的就是unicode对应的数值,
char可以直接与int进行转换:
char c = '我';
int i = c;
System.out.println(i); // 输出25105,对应unicode:\u6211