/** * 判断字符是否是中文 * * @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; }