手动转Java字符串类型(char)为UTF-8格式

说实话我还想介绍下什么是unicode和utf-8,但是每次的介绍文总是会跑题然后越写越长,然后没填完丢弃在草稿箱…这次就只讲方式不介绍了。

unicode通常以十六进制显示在各地,
(差一个介绍十六进制的坑)
如“好”字以unicode显示:
597d
十六进制是二进制的缩写形式,于是我们也可以将十六进制还原回二进制:(差一个介绍十六进制转二进制的坑)
0101 1001 0111 1101

再来看一下UTF-8的码表
1 byte 0xxxxxxx 编号0~127(2^8 - 1)
2 byte 110xxxxx 10xxxxxx 编号~2047(2^11 - 1)
3 byte 1110xxxx 10xxxxxx 10xxxxxx 编号~65535(2^16 - 1)
4 byte 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx ...

我们要做的是将二进制的数字,从右往左填入一个长度足够的utf8码表中,很明显3byte长度的码表就足够了,这也是为什么汉字unicode转utf8时,会从2字节变为3字节。
填好:(一个怎么用代码填进去的坑)

0101 1001 0111 1101
xxxx0101 xx1001 01 xx11 1101
1110xxxx 10xxxxxx 10xxxxxx
11100101 10100101 10111101

然后将上面每个字节byte转为10进制,在代码中强转为byte并放入同一个数组,再利用String的重构方法传入byte数组和指定的字符集名,就能得到对应的字符串,输出后就能验证~

byte[] b = {(byte)229,(byte)165,(byte)189};
String str = new String(b,"utf-8");
System.out.println(str);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值