/**
* 判断字符是否是中文
*
* @param c 字符
* @return 是否是中文
*/
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;
}
public static String enANum = "^[\\^\\w+-=*/%&$#@<>(){}\\[\\],.:;\"\'\\\\]*$";
public static Pattern enANumPat = Pattern.compile(enANum);
public static String [] encode = {"GB2312","GBK","ISO-8859-1","UTF-8"};
public static boolean isEnglishAndNumber(String str) {
Matcher matcher = null;
String temp[] = str.split("");
for (String s : temp) {
matcher = enANumPat.matcher(s);
if(!matcher.find()){
return false;
}
}
return true;
}
public static String getUnEncode(String str) throws Exception {
String newStr = null;
if (!isEnglishAndNumber(str)) {
for (int i = 0; i < encode.length; i++) {
for (int j = 0; j < encode.length; j++) {
newStr = new String(str.getBytes(encode[i]), encode[j]);
char temp[] = newStr.toCharArray();
boolean isAll = true;
for (char c : temp) {
if (!isEnglishAndNumber(String.valueOf(c)) && !isChinese(c)) {
isAll = false;
break;
}
}
if (isAll) {
return newStr;
}
}
}
}
return str;
}
转载于:https://my.oschina.net/rwrwd7/blog/534127