汉字与UTF编码的互相转换(Java)

您所在的位置:网站首页 汉字翻译成二进制代码 汉字与UTF编码的互相转换(Java)

汉字与UTF编码的互相转换(Java)

2023-12-27 03:31| 来源: 网络整理| 查看: 265

1. 普通汉字 获取汉字的UTF8编码 public static void main(String[] args) throws Exception {     String str = "金";      byte [] bs = str.getBytes("UTF-16");      System.out.println(bytesToHexFun(bs)); } public static String bytesToHexFun(byte[] bytes) { StringBuilder buf = new StringBuilder(bytes.length * 2); for(byte b : bytes) { // 使用String的format方法进行转换 buf.append(String.format("%02x", new Integer(b & 0xff))); } return buf.toString(); }

打印结果:FEFF91D1

把FEFF去掉,剩下的91D1就是UTF8编码了

UTF8编码转汉字

我们用上面的91D1转换文字看看

int utf8 = Integer.parseInt("91D1", 16); String str = String.valueOf((char) utf8); System.out.println(str.toString());

打印结果:金

2. 生僻字 获取汉字的UTF8编码 public static void main(String[] args) throws Exception {     String str = "𩇕";      byte [] bs = str.getBytes("UTF-16");      System.out.println(bytesToHexFun(bs)); }

打印结果:FEFFD864DDD5

同前一次一样把FEFF去掉,剩下的D864DDD5就是UTF8编码了。

但是这里需要注意的是,D864DDD5是两个UTF8编码的组合了,D864和DDD5

UTF8编码转汉字

我们用上面获得的生僻字的编码D864和DDD5

int utf8_1 = Integer.parseInt("D864", 16); int utf8_2 = Integer.parseInt("DDD5", 16); String str = String.valueOf(new char[] {(char)utf8_1,(char)utf8_2}); System.out.println(str.toString());

打印结果:𩇕

3. 十六进制编码和UTF编码

我在这里获取UTF编码的时候,用的是UTF-16,而不是UTF-8。

byte [] bs = str.getBytes("UTF-16");

UTF-8:获取的是十六进制编码

UTF-16:获取的是UTF编码

获取十六进制编码 public static void main(String[] args) throws Exception {     String str = "金";      byte [] bs = str.getBytes("UTF-8");      System.out.println(bytesToHexFun(bs)); }

打印结果:E98791

这个【E98791】就是【金】的十六进制编码

十六进制转成文字

我偷个懒,也是个实验,在每两个字符中间加一个【%】,这字符串是不是很熟悉? 然后URLDecoder.decode打印出汉字。

System.out.println(URLDecoder.decode("%E9%87%91", "UTF-8")); System.out.println(URLDecoder.decode("%F0%A9%87%95", "UTF-8"));

打印结果: 金 𩇕

几个字符不同表达方式的比较: Unicode 代码点U+91D1U+291D5表示字形金𩇕UTF-32 代码单元 000091D1 000291D5UTF-16 代码单元 91D1 D864DDD5UTF-8 代码单元 E98791 F0A98795


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3