欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-18 18:50:52
...

说实话我还想介绍下什么是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);