直接上代码了!
package com.yt.eos.common.utils;
import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
/**
* 乱码处理类
* @author tyg
* @date 2020年4月26日下午2:27:51
*/
public class MessyCodeUtil {
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println(decodeMessyCode("tyg"));
System.out.println(decodeMessyCode("123"));
System.out.println(decodeMessyCode("中国加油!"));
System.out.println(decodeMessyCode("。。..&……%¥¥%"));
System.out.println(decodeMessyCode("ç§äº"));
}
/**
* 解码
* 1、如果是乱码则解码后返回
* 2、如果不是乱码则直接返回
* 注:不是所有乱码都适用,只适用于IOS-8859-1编码的乱码
* @param str
* @return
* @throws UnsupportedEncodingException
* @author tyg
* @date 2020年4月26日下午2:21:07
*/
public static String decodeMessyCode(String str) throws UnsupportedEncodingException {
if(StringUtils.isBlank(str)) {
return str;
}
boolean isMessyCode = isMessyCode(str);
if (isMessyCode) {
return new String(str.getBytes("ISO-8859-1"), "UTF-8");
}
return str;
}
/**
* 验证是否乱码
* @param str
* @return true:乱码,false:不是乱码
* @author tyg
* @date 2020年4月26日下午2:18:26
*/
public static boolean isMessyCode(String str) {
if(StringUtils.isBlank(str)) {
return false;
}
Pattern p = Pattern.compile("\\s*|t*|r*|n*");
Matcher m = p.matcher(str);
String after = m.replaceAll("");
String temp = after.replaceAll("\\p{P}", "");
char[] ch = temp.trim().toCharArray();
float chLength = ch.length;
float count = 0;
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
if (!Character.isLetterOrDigit(c)) {
if (!isChinese(c)) {
count = count + 1;
}
}
}
float result = count / chLength;
if (result > 0.4) {
return true;
}
return false;
}
/**
* 判断字符是否是中文
* @param c 字符
* @return 是否是中文
* @author tyg
* @date 2020年4月26日下午2:19:41
*/
public static boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
}