使用java从乱码文本中解析出正确的文本
这是一个可以从乱码文本中得到正确的原始文本的程序,其基于的原理在于错误的编码往往导致位补充,因此正确的文本使用的字节数应该是最少的(之一)。
package com.hongyuan.test;
import java.io.UnsupportedEncodingException;
/*
* 这是一个可以从乱码文本中得到正确的原始文本的程序,其基于的原理在于错误的编码往往导致位补充,
* 因此正确的文本使用的字节数应该是最少的(之一)。
*
* 如果你在测试此程序时,无法得到正确的文本,可能的原因如下:
* 1.此程序仅能从一次错误编码文本中得到原始文本,无法从多次错误编码中恢复文本。
* 2.有时错误的编码导致一些字符变为不可见字符,你可能没有把所有的乱码文本拷贝过来,从而导致位缺失。这种情况下无法恢复文本。
* 3.原始文本是一个比较大的字符集,错误的编码使用小的字符集,那些在小字符集之外的字符信息丢失,无法从中解析正确的文本。
* 4.恭喜你中奖了,有一些字符使用任何一种编码没有什么不同或者错误的编码没有导致位补充,那么我也无能为力了。(这种情况确实很少见)
*
* 注:程序中的乱码文本是将百度首页(utf-8)调整为gbk(显然会乱码)得到的,有兴趣的同志可以使用其他的乱码测试。有问题欢迎回复。
*/
public class CharSetTest {
public static final String[] CHARSET_NAMES=new String[]{"ISO8859-1","GBK","UTF-8"};
public static void main(String[] args) throws UnsupportedEncodingException {
//乱码字符串
String str="寰蒋鐧惧害鍏辨帹Windows XP鑱斿悎闃叉姢瑙e喅鏂规";
int strLength=Integer.MAX_VALUE; //字符长度
String newStr=""; //从乱码字符串分析出的字符串
String srcCharSet=""; //当前乱码字符串编码
String targetCharSet=""; //乱码字符串正确的编码
//遍历可能的编码组合,从中造成编码长度最小的编码格式
for(int i=0;i<CHARSET_NAMES.length;i++){
for(int j=0;j<CHARSET_NAMES.length;j++){
String temp=new String(str.getBytes(CHARSET_NAMES[i]),CHARSET_NAMES[j]);
//System.out.println(temp);
if(temp.length()<=strLength){
strLength=temp.length();
newStr=temp;
srcCharSet=CHARSET_NAMES[i];
targetCharSet=CHARSET_NAMES[j];
}
}
}
//输出查询到的编码及正确文本格式
System.out.println(srcCharSet+"-->"+targetCharSet+":"+newStr);
}
}
- java自动根据文件内容的编码来读取避免乱码
- java生成csv文件乱码的解决方法示例 java导出csv乱码
- JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
- java页面中文乱码的解决办法
- javascript alert乱码的解决方法
- java URL乱码的解决办法
- 解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
- JAVA POST与GET数据传递时中文乱码问题解决方法
- java连接mysql数据库乱码的解决方法
- java中Filter过滤器处理中文乱码的方法
- Java下载文件时文件名乱码问题解决办法
- java中Servlet处理乱码的方法
- java 页面url传值中文乱码的解决方法
- javascript通过url向jsp页面传递中文参数导致乱码解决方案
- java 逐行读取txt文本如何解决中文乱码
- JavaScript中出现乱码的处理心得
- Javascript和Ajax中文乱码吐血版解决方案
- JavaScript读取中文cookie时的乱码问题的解决方法
最新评论