中文與unicode的相互轉換例項
阿新 • • 發佈:2019-01-01
【1】中文轉unicode
程式碼例項如下:
/** * * 將String轉換成unicode編碼格式 * @param str * @return String * @throws */ public static String unicodeEncoding(String str) { if (str == null||str.trim().length()==0) { return EMPTY; } StringBuffer unicodeBytes = new StringBuffer(); for (int byteIndex = 0; byteIndex < str.length(); byteIndex++) { //字元-Unicode-16進位制字串形式返回 String hexB = Integer.toHexString(str.charAt(byteIndex)); unicodeBytes.append("\\u"); //一定補足4個16進位制位--即2個位元組 if (hexB.length() <= 2) { unicodeBytes.append("00"); } unicodeBytes.append(hexB); } return unicodeBytes.toString(); }
【2】unicode轉中文
程式碼例項如下:
/** * 將unicode轉中文 * @param dataStr * @return */ public static String decodeUnicode(String dataStr) { int start = 0; int end = 0; StringBuffer buffer = new StringBuffer(); while (start > -1) { end = dataStr.indexOf("\\u", start + 2); String charStr = ""; if (end == -1) { charStr = dataStr.substring(start + 2, dataStr.length()); } else { charStr = dataStr.substring(start + 2, end); } //16進位制字串--Unicode--強轉為char 返回 char letter = (char) Integer.parseInt(charStr, 16); // buffer.append(new Character(letter).toString()); start = end; } return buffer.toString(); }
測試如下:
@Test public void testUnicodeSTr(){ String dataStr = "\\u90d1\\u5dde\\u5e02"; String decodeUnicode = ToolUtils.decodeUnicode(dataStr); System.out.println(decodeUnicode); String unicodeEncoding = ToolUtils.unicodeEncoding(decodeUnicode); System.out.println(unicodeEncoding); }
輸出結果如下:
鄭州市
\u90d1\u5dde\u5e02
【Tips】
需要額外說明的是,如果字串為類似"\u90d1\u5dde\u5e02"等格式,不用轉換,可以直接存入資料庫。
IDE 控制檯列印會發現其是中文,資料庫同是!