java 中文與unicode互轉
阿新 • • 發佈:2018-05-25
true format param cte _id col rms AI deb
public class FontUtil { public static void main(String[] args) { System.out.println(chinaToUnicode("未登陸!")); System.out.println(decodeUnicode("\u672a\u767b\u9646\uff01")); } /** * 把中文轉成Unicode碼 * * @param str * @return */ publicstatic String chinaToUnicode(String str) { String result = ""; for (int i = 0; i < str.length(); i++) { int chr1 = (char) str.charAt(i); if (chr1 >= 19968 && chr1 <= 171941) {// 漢字範圍 \u4e00-\u9fa5 (中文) result += "\\u" + Integer.toHexString(chr1); }else { result += str.charAt(i); } } return result; } /** * 判斷是否為中文字符 * * @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; } //Unicode轉中文 public static String decodeUnicode(final String unicode) { StringBuffer string = new StringBuffer(); String[] hex = unicode.split("\\\\u"); for (int i = 0; i < hex.length; i++) { try { // 漢字範圍 \u4e00-\u9fa5 (中文) if(hex[i].length()>=4){//取前四個,判斷是否是漢字 String chinese = hex[i].substring(0, 4); try { int chr = Integer.parseInt(chinese, 16); boolean isChinese = isChinese((char) chr); //轉化成功,判斷是否在 漢字範圍內 if (isChinese){//在漢字範圍內 // 追加成string string.append((char) chr); //並且追加 後面的字符 String behindString = hex[i].substring(4); string.append(behindString); }else { string.append(hex[i]); } } catch (NumberFormatException e1) { string.append(hex[i]); } }else{ string.append(hex[i]); } } catch (NumberFormatException e) { string.append(hex[i]); } } return string.toString(); } }
java 中文與unicode互轉