[关闭]
@wxf 2017-06-03T06:52:22.000000Z 字数 1053 阅读 687

7.如何从乱码中恢复(下)

老马说编程


在上节中说到乱码出现的主要原因,即在进行编码转换的时候,如果将原来的编码识别错了,进行了转换,就会发生乱码,而且这时候无论怎么切换查看乱码的方式,都是不行的。
“乱”的主要原因是发生了一次错误的编码转换,恢复是要恢复两个关键信息,一是原来的二进制编码方式A,二是错误解读的编码方式B。

使用String处理乱码

Java中处理字符串的类有String,String中有我们需要的两个重要方法:

  1. //先按照Windows-1252编码获取字符串的二进制,然后按GB18030编码解读这个二进制,得到一个新的字符串。
  2. String str = "ÀÏÂí";
  3. String newStr = new String(str.getBytes("Windows-1252"), "GB18030");

其实 ,我们可以写一个循环,代码形式如下:

  1. public static void recover(String str) throws Exception{
  2. String[] charsets = new String[]{"Windows-1252", "GB18030", "Big5", "UTF-8"};
  3. for(int i = 0; i < charsets.length; i++){
  4. for(int j = 0; j < charsets.length; i++){
  5. if(i != j){
  6. String newStr = new String(str.getBytes(charsets[i]), charsets[j]);
  7. System.out.println("假设原编码是:"+charsets[j]+"---被错误解读为:"+charsets[i]+"---结果表现形式:"+newStr);
  8. }
  9. }
  10. }
  11. }

小结

在上一节和本节介绍了编码的知识,乱码的原因恢复方法,这些都是与语言无关的。
接下来,我们来看看在Java中如何表示和处理字符,我们知道Java中用char类型表示一个字符,但在第三节我们提到了一个问题,即“字符为什么也可以进行算术运算和比较”。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注