1. 程式人生 > >java判斷字元是否為中文亂碼的方法

java判斷字元是否為中文亂碼的方法

   中文亂碼在專案中是經常會遇到的情況。當我們通過設定request和response字符集,但是還是出現中文亂碼的時候,今天給介紹一種通過java方法實現判斷string是否為亂碼的方法。

	 /** 
     * 判斷字串是否是亂碼 
     * 
     * @param strName 字串 
     * @return 是否是亂碼 
     */  
    public static boolean isMessyCode(String strName) {  
        Pattern p = Pattern.compile("\\s*|t*|r*|n*");  
        Matcher m = p.matcher(strName);  
        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;  
        } else {  
            return false;  
        }  
   
    }  
    
    
    /** 
     * 判斷字元是否是中文 
     * 
     * @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 void main(String[] args) {
		// TODO Auto-generated method stub
		
		/*List<String> list = new ArrayList<String>();
		
		Map<List<String>, String> map = new HashMap<>();*/
		
		
		String messcode = "ss201888asdf;#????";
		System.out.println(">>>>>>>>>>:"+isMessyCode(messcode));
		
		

	}

輸出結果:

>>>>>>>>>>:false