使用java从乱码文本中解析出正确的文本
发布时间:2023-12-03 12:10:22
这是一个可以从乱码文本中得到正确的原始文本的程序,其基于的原理在于错误的编码往往导致位补充,因此正确的文本使用的字节数应该是最少的(之一)。
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);
}
}
猜你喜欢
- 最近在使用 url 的 queryString 传递参数时,因为参数的值,被DES加密了,而加密得到的是 Base64的编码字符串类似于:z
- Mybatis基础回顾与高级应用数据库:mysql5.7jdk:15引入依赖<!--引入依赖--> &
- 有时候,我们需要把对象A的所有值复制给对象B(B = A),但是这样用等号给赋值你会发现,当B中的某个对象值改变时,同时也会修改到A中相应对
- springboot上传文件大小的配置我这里记录两种,一种是设置在配置文件里只有两行代码,一种是加个Bean首先第一种:applicatio
- 1.概述数据库开发一直是JAVA开发的核心之一,作为现在JAVA EE的基石框架,Spring Boot自身携带了一个JDBCTemplat
- 前言:在没有接触java8的时候,我们遍历一个集合都是用循环的方式,从第一条数据遍历到最后一条数据,现在思考一个问题,为什么要使用循环,因为
- 1、修改application.properties新建 Mapper、实体类 相应的文件夹,将不同数据源的文件保存到对应的文件夹下# te
- 本文实例讲述了Android编程之消息机制。分享给大家供大家参考,具体如下:一、角色描述1.Looper: 一个线程可以产生一个Looper
- 本文介绍了SpringCloud +Zookeeper完成配置中心,分享给大家,具有如下:使用场景项目配置更改不需要打包,重启提供配置文件的
- (注意:本文基于JDK1.8)前言元素在存储到内存中,当我们需要使用在内存中存储的元素,这就涉及到在内存中查找元素,今天一起学习Vector
- 最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启
- 一.解析概念StringUtils概念StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提
- 1、HashMap HashMap继承抽象类AbstractMap,实现接口Map、Cloneable, Serializable接口。Ha
- 前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的
- 前言Mybatis真正强大的地方在于SQL映射语句,这也是它的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单,我上篇文章语句讲
- 1.登录腾讯云点击登录选择浏览器登录。输入用户名 按回车键 然后输入 密码。2.安装java环境直接命令:yum -y install ja
- logback输出日志屏蔽quartz的debug等级日志在一个spring的老项目中,使用了logback来作为日志管理,logback.
- sqlite是啥?1、一种轻型数据库2、关系型数据库3、占用资源很低,几百K内存,适合嵌入式设备4、支持windows、linux、unix
- 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。 首先
- 在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进