/**
* 測試某個字符串的編碼,以解決亂碼問題
* 切忌:一定先取得待測字符串的數組形式然後再測試,別轉換爲字符串!
* @param bt 要檢測的字符的字節數組
* @param sample 是傳入一些包含在待確定編碼類型的字符串中的一段字符(需要在調用函數中人工輸入!)
* 如果該參數爲空字符串或null,則函數列出待確定編碼類型字符串的字節數組的所有編碼輸出供選擇
* 根據輸出結果,就可以判斷適合採用哪種編碼形式
*/
public static void checkStringCharset(String sample, byte[] syd168) {
SortedMap<String, Charset> map = Charset.availableCharsets(); //創建哈希表
ArrayList<String> charSets = new ArrayList<String>(); //創建列表
//遍歷哈希表元素
for (Iterator<String> it = map.keySet().iterator(); it.hasNext();) {
Object key = it.next(); //獲取編碼名稱
charSets.add(key.toString()); //添加到列表
}
//遍歷列表元素
for (Object ob : charSets) {
//如果沒輸入樣本數據,則逐個進行編碼顯示,以供人工判斷編碼類型
if (sample.equals("") || sample.equals(null)) {
try {
System.out.println("原字符串的[" + ob.toString() + "]編碼輸出爲:" + new String(syd168, ob.toString()));
}
catch (IOException e1) {}
System.out.println("請根據輸出結果,選擇適合的編碼方式進行處理");
System.out.println("可以用 new String(byte[],charset)可以解決亂碼問題");
} else {//傳入了樣本數據
try {
String tmp = new String(syd168, ob.toString());//取得編碼結果
if (tmp.indexOf(sample) >= 0) {//在編碼字符串中找到了樣本字符串,說明編碼正確
System.out.println("待確定編碼類型的字符串可能的編碼爲:" + ob.toString());
}
}
catch (UnsupportedEncodingException e) {}
}
}
}