不同编码方式的字符串如何相互转换

假设把一个编码方式为A的字符串变成编码方式为B的字符串,那就可以这样做:

byte[] a = 编码方式为A的字符串.getBytes(B);
String b = new String(a, B);

注意:A和B经常使用的是GBK、UTF-8、ISO8859-1、unicode这四种
解释:
getBytes()方法是把字符串变成指定编码方式的字节数组,如果里面不指定编码方式,那就使用系统默认的编码方式,完成字符串到字节数组的转换之后,那就可以去完成字节数组到指定编码方式字节的转换了,如果里面不指定编码方式,那就使用系统默认的编码方式,我们常见的编码方式有:GBK、UTF-8、ISO8859-1、unicode

最后可以写一个测试把UTF-8编码方式的汉字转换成其他编码方式的汉字,一方面是验证上面介绍的理论,另一方面是介绍一点新的知识,代码如下:

// 下面的"曌"默认是UTF-8编码方式
byte[] a1 = "曌".getBytes();
byte[] b1 = "曌".getBytes("GBK");
byte[] c1 = "曌".getBytes("UTF-8");
byte[] d1 = "曌".getBytes("ISO8859-1");
byte[] e1 = "曌".getBytes("unicode");
System.out.println("默认编码方式的字节长度="+a1.length);
System.out.println("GBK编码方式的字节长度="+b1.length);
System.out.println("UTF-8编码方式的字节长度="+c1.length);
System.out.println("ISO8859-1编码方式的字节长度="+d1.length);
System.out.println("unicode编码方式的字节长度="+e1.length);

System.out.println("-----------------------------------------");

String a2 = new String(a1);
String b2 = new String(b1, "GBK");
String c2 = new String(c1, "UTF-8");
String d2 = new String(d1, "ISO8859-1");
String e2 = new String(e1, "unicode");
System.out.println("按照默认编码方式编码的汉字="+a2);
System.out.println("按照GBK编码方式编码的汉字="+b2);
System.out.println("按照UTF-8编码方式编码的汉字="+c2);
System.out.println("按照ISO8859-1编码方式编码的汉字="+d2);
System.out.println("按照unicode编码方式编码的汉字="+e2);

结果:

默认编码方式的字节长度=3
GBK编码方式的字节长度=2
UTF-8编码方式的字节长度=3
ISO8859-1编码方式的字节长度=1
unicode编码方式的字节长度=4
-----------------------------------------
按照默认编码方式编码的汉字=曌
按照GBK编码方式编码的汉字=曌
按照UTF-8编码方式编码的汉字=曌
按照ISO8859-1编码方式编码的汉字=?
按照unicode编码方式编码的汉字=

分析:
1、在编码中采用的默认编码方式是UTF-8,从默认编码方式的字节长度和其他编码方式的字节长度相比是可以看出来的。
2、ISO8859-1编码方式的汉字是个问号,因为一个汉字由两个字节组成,而该编码方式是单字节编码,使用getBytes(“ISO8859-1”)的时候,只能从每个汉字上取到一半的字节,另外一般的字节丢失了,所以在使用new String(d1, “ISO8859-1”)恢复的时候找不到相应的字符,默认使用编码63代码,该编码对应的是?,因此显示的是?

发布了177 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42449963/article/details/105399484