利用「編碼後再解碼若內容不變,則原字串完全屬於該編碼集」的特性:
public static boolean isGBK(String s) throws UnsupportedEncodingException {
return s.equals(new String(s.getBytes("GBK"), "GBK"));
}
s.getBytes("GBK"):若字串含非 GBK 字符(如生僻字、Emoji),會以 ? 或替換字節編碼new String(bytes, "GBK"):將位元組按 GBK 解碼回字串?),equals 回傳 falseBig5、UTF-8 等編碼檢查涉及兩次編碼/解碼,長字串建議改用 CharsetEncoder.canEncode() 或正則 [\u0000-\uFFFF] 篩選,避免建立大量臨時物件。