使用java从乱码文本中解析出正确的文本_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);
 }

}

时间: 2024-09-20 09:24:39

使用java从乱码文本中解析出正确的文本_java的相关文章

Java实现从字符串中找出数字字符串的方法小结_java

本文实例总结了Java实现从字符串中找出数字字符串的方法.分享给大家供大家参考,具体如下: int start = 0; String numStr = null; for (int j = 0; j < valuesStr.length() - 1; j++) { if (Character.isDigit(valuesStr.charAt(j)) == false && Character.isDigit(valuesStr.charAt(j + 1)) == true) { s

并发大数据处理-如何从下面数据中判断出正确的期望值

问题描述 如何从下面数据中判断出正确的期望值 三组数据分别代表了三种投资价,想问下哪种投资组合风险最小,取值最优?后面尾数部分代表的是权值:有点类似于股票上下盘的分析,但不是股票数据

Java从zip文件中解析XML数据实例

从zip文件中解析xml文件一般步骤是先解压zip文件,然后在解析xml,这里直接从zip文件中读取xml的输入流进行解析,减少I/O操作.下面是一个从zip文件中解析xml文件的示例:    代码如下 复制代码 /**  * 从zip文件中解析XML数据<br/>  * @param filePath 文件绝对路径  * @return List<?>  * @throws IOException  * @throws DocumentException  * @author 大

java集合类arraylist循环中删除特定元素的方法_java

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } }  上面这种方式会抛出如下异常:   Exception in thread "main" java.lan

Java的Hibernate框架中的组合映射学习教程_java

一.组合映射组合是关联关系的一种特殊情况,是关联关系耦合度最高的一种关系,组合的主对象和子对象拥有相同的生命周期,主对像消亡的话子对象也会消亡.这里使用雇主和用户作为示例,用户和雇主都拥有联系方式属性,如果这里站在对象角度思考的话,常常会把对象模型绘制成为组合的方式,抽象出来一个共同的联系方式类,然后两种人分别包含相应的联系方式对象即可,向应的对象模型时它的对象示例如下图所示: 组合对象模型在生成相应的关系模型后会把对应的子类包含到主表中,所以对应的表结构会将相应的属性生成到对应的表中,相应的表

简介Java的Hibernate框架中的Session和持久化类_java

SessionSession对象用于获取与数据库的物理连接. Session对象是重量轻,设计了一个互动是需要与数据库每次被实例化.持久化对象被保存,并通过一个Session对象中检索. 会话中的对象不应该保持开放很长一段时间,因为他们通常不被线程安全的,他们应该被创建并根据需要摧毁他们.这次会议的主要功能是提供创建,读取和删除操作映射的实体类的实例.实例中可能存在以下三种状态之一在给定时间点: 短暂性: 持久化类的未与会话相关联,并在数据库中没有代表性,没有标识值的新实例被Hibernate认

java使用正则表达式判断邮箱格式是否正确的方法_java

本文实例讲述了java使用正则表达式判断邮箱格式是否正确的方法.分享给大家供大家参考.具体如下: import java.io.*; public class CheckEmail { public static boolean checkEmail(String email) {// 验证邮箱的正则表达式 String format = "\\p{Alpha}\\w{2,15}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}"; //p{Alpha}:内容是必选的,和

C++实现在文本中找出某个单词的位置信息_C 语言

代码很简单,功能也很单一,这里就不多废话了,大家直接看代码吧. #include <stdio.h> #include <string.h> int main(int argc,char**argv){ char *token = argv[1]; FILE *fp = fopen("./test.txt","a+"); char buf[1024]; char *p; int s=-1,len=strlen(token),line=0,po

java怎么把数据库中的值显示到文本框中

问题描述 用的是Jbuilder!!谢谢!! 解决方案 解决方案二:我举个例子,你一看就懂.下面是查询语句.你然后到你要显示数据的text框那边.添加以下代码:finalJTextFieldscorefield=newJTextField();finalGetscoregetscore=newGetscore();List<String>list=getscore.selectscour(sname,cname);for(Stringitem:list){scorefield.setText(