1. 程式人生 > >中文與unicode的相互轉換例項

中文與unicode的相互轉換例項

【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 控制檯列印會發現其是中文,資料庫同是!