unicode、utf-8、utf-16、java char的个人理解

参考文章:彻底弄懂 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值