使用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);
 }

}

(0)

相关推荐

  • java 逐行读取txt文本如何解决中文乱码

    java读取txt文本中如含有中文,可能会出现乱码,解决方案是: 1.要统一编码,java工程的编码,txt文本编码,java工程中的java文本编码都统一为utf-8: 2.利用 InputStreamReader(new FileInputStream(fileUrl), "utf-8")将文本再次设置为utf-8 3.具体代码如下 复制代码 代码如下: InputStreamReader isr; try { isr = new InputStreamReader(new Fil

  • JavaScript中的常见问题解决方法(乱码,IE缓存,代理)

    解决AJAX中文乱码常用的两种方法 1. 在客户端进行encodeURI(utf-8也可以不做,默认),在服务器端将iso-8859-1编码转为utf-8编码 2.在客户端进行两次encodeURI,在服务器端进行一次转换. 第2种方法能解决问题的原因: 进行两次转换后,在第一次getparameter方法中进行第一次解码,因为解出来的是英文(第一次encode之后的结果),所以不会出问题:第二次使用URLDecoder的decode方法,所以能正常解决这个问题.需要注意的是,在decode方法

  • java中Servlet处理乱码的方法

    今天在部署一个webservices程序的时候,从页面获取数据的servlet出现了乱码问题,在servlet中我已经把request.setCharacterEncoding("GB2312");这段文字加入到代码中去,但是还是出现乱麻问题. 到网上找资料,如下:JAVA是Unicode编码,你先转换成ISO8859-1,然后再转换成GBK或是GB2312. java 代码 复制代码 代码如下: request.setCharacterEncoding("ISO8859-1

  • java页面中文乱码的解决办法

    在页面提交到tomcat乱码 解决方法是在tomcat/conf/server.xml中进行配置以tomcat6.0.32为例,需将以下代码:Xml代码 复制代码 代码如下: <Connectorport="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"/><Connector port="8080"

  • java URL乱码的解决办法

    平常我们都是encode 一次,然后直接接受参数 String para = request.getParameter(paramName);  这是因为容器自动能帮我们解码 (DECODE) 一般来说,  encode 的时候,使用的 UTF-8(系统的 编码)  那么解码的时候也是使用   UTF-8的话, 那么不会出现传说中的乱码~ 但是如果 在JSP 页面 使用的UTF-8,但是  容器 解码的时候 使用的 别的编码的话,则有可能出现乱码 这个时候.一般可以使用: String  par

  • java中Filter过滤器处理中文乱码的方法

    注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处理乱码的格式不一致.所以编译出错. 解决方法:所有地方都用utf-8或gbk 复制代码 代码如下: //过滤器类CharactorFilter.jsppackage cn.com.Filter; import java.io.IOException; import javax.servlet.Fil

  • JavaScript读取中文cookie时的乱码问题的解决方法

    复制代码 代码如下: function Get_Cookie(name) { var start = document.cookie.indexOf(name+-=-); var len = start+name.length+1; if ((!start) && (name != document.cookie.substring(0,name.length))) return null; if (start == -1) return null; var end = document.

  • java连接mysql数据库乱码的解决方法

    解决方法一: mysql安装时候的编码, 看下my.ini,有无 复制代码 代码如下: [mysql] default-character-set=utf8 [client] default-character-set=utf8 [mysqld] default-character-set=utf8创建表的时候设置: DROP TABLE IF EXISTS `Company`; CREATE TABLE IF NOT EXISTS `Company` ( `Cname` VARCHAR(10)

  • Java下载文件时文件名乱码问题解决办法

    复制代码 代码如下: public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer();              for (int i = 0; i < s.length(); i++) {                  char c = s.charAt(i);                  if (c >= 0 && c <= 255) {          

  • javascript alert乱码的解决方法

    javascript alert()函数就是一个用于输入提示的功能,但今天在使用alert()提示时中文乱码,拼音什么的都没有问题呀,下面我在论坛找到一解决办法,下面与大家分享.解决办法一: 复制代码 代码如下: echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';echo '<script type="text/javascript&q

  • 解析关于java,php以及html的所有文件编码与乱码的处理方法汇总

    php文件中在乱码(如a.php文件在浏览器乱码):header("Content-Type:text/html;charset=utf-8")是设置网页的.mysql_query("set names utf-8")设置数据库的. java中的struts:中文乱码问题一般是指当请求参数有中文时,无法在Action中得到正确的中文.Struts2中有2种办法可以解决这个问题:设置JSP页面的pageEncoding="utf-8",就不会出现中

  • JavaScript中出现乱码的处理心得

    常见乱码情况: 1.客户端提交数据到后台,参数值有乱码情况,如:a.aspx?value="中文值"&type="%$#((&_特殊符号": 2.后台读数据到客户端后出现乱码: 3.部分文件间js引用或css样式无效. 总结解决方法: 一:首先保证项目相关的文件格式编码(即另存为格式)统一为utf-8,特别是相关的CSS,JS文件的格式强烈建议统一为 utf-8: 二: JS中涉及到参数提交,传递,有可能出现中文.'_'下划线.特殊符号的地方,用es

  • JAVA POST与GET数据传递时中文乱码问题解决方法

    做了N年的java开发从没有自己写过一个网站,最近乱忙活弄了一个企业家宣传网站. 跟大家一样遇到了中文字符集乱码问题,为了大家能少走一些弯路,所以在此分享一下即简单又实用的解决方法. 1. POST 数据传递 接收页 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.setCharacterEnco

  • java自动根据文件内容的编码来读取避免乱码

    通过cpdetector这个开源的jar包可以自动判断当前文件的内容编码,从而在读取的时候选择正确的编码读取,避免乱码问题. 测试结果,提供截图: GBK文件内容

  • Javascript和Ajax中文乱码吐血版解决方案

    今天弄了一天的Ajax中文乱码问题,Ajax的乱码问题分为两种: 1. JavaScript输出的中文乱码, 比如:alert("中文乱码测试"); 解决的办法比较简单,就是把jsp里所有的charset和pageEncoding的值都设置成相同的,一般是utf-8. 2. 这第二种就是Ajax从服务器端获得的数据出现乱码的问题.(我搜了n个小时试了n中方法才找到答案) 现在将我搜集的比较有效的方法都与大家分享:(我使用的开发环境是Eclipse,相信其他语言和开发环境都差不太多.)

  • java生成csv文件乱码的解决方法示例 java导出csv乱码

    复制代码 代码如下: import java.io.File;import java.io.IOException;import java.util.List; import com.google.common.base.Charsets;import com.google.common.base.Joiner;import com.google.common.base.Preconditions;import com.google.common.collect.Lists;import com

  • javascript通过url向jsp页面传递中文参数导致乱码解决方案

    2013-1-16 10:35:49 org.apache.tomcat.util.http.Parameters processParameters 警告: Parameters: Character decoding failed. Parameter 'id' with value '%u8BA2%u5355' has been ignored. Note that the name and value quoted here may corrupted due to the failed

  • java 页面url传值中文乱码的解决方法

    中文问题,是在应用中常常遇到的问题. 这将涉及到字符解码操作,我们在应用中常常会用new String(fieldType.getBytes("iso-8859-1"), "UTF-8");等类似的方法去解码.但这种方式受具体应用环境限制,往往在应用部署环境发生改变时,还会出现中文乱码. 在这里介绍一种解决方法,可以在任何应用部署环境下通用.此方法分两步: 1.在客户端用escape(encodeURIComponent(fieldValue))方法编码,例如: 复

随机推荐