@wxf
2017-06-03T14:52:22.000000Z
字数 1053
阅读 830
老马说编程
在上节中说到乱码出现的主要原因,即在进行编码转换的时候,如果将原来的编码识别错了,进行了转换,就会发生乱码,而且这时候无论怎么切换查看乱码的方式,都是不行的。
“乱”的主要原因是发生了一次错误的编码转换,恢复是要恢复两个关键信息,一是原来的二进制编码方式A,二是错误解读的编码方式B。
Java中处理字符串的类有String,String中有我们需要的两个重要方法:
//先按照Windows-1252编码获取字符串的二进制,然后按GB18030编码解读这个二进制,得到一个新的字符串。
String str = "ÀÏÂí";
String newStr = new String(str.getBytes("Windows-1252"), "GB18030");
其实 ,我们可以写一个循环,代码形式如下:
public static void recover(String str) throws Exception{
String[] charsets = new String[]{"Windows-1252", "GB18030", "Big5", "UTF-8"};
for(int i = 0; i < charsets.length; i++){
for(int j = 0; j < charsets.length; i++){
if(i != j){
String newStr = new String(str.getBytes(charsets[i]), charsets[j]);
System.out.println("假设原编码是:"+charsets[j]+"---被错误解读为:"+charsets[i]+"---结果表现形式:"+newStr);
}
}
}
}
在上一节和本节介绍了编码的知识,乱码的原因恢复方法,这些都是与语言无关的。
接下来,我们来看看在Java中如何表示和处理字符,我们知道Java中用char类型表示一个字符,但在第三节我们提到了一个问题,即“字符为什么也可以进行算术运算和比较”。