中文与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 控制台打印会发现其是中文,数据库同是!

你可能感兴趣的:(Java编码解码)