汉字与UTF编码的互相转换(Java) |
您所在的位置:网站首页 › 汉字翻译成二进制代码 › 汉字与UTF编码的互相转换(Java) |
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 |