`
ekumen
  • 浏览: 104807 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

中文与Unicode表示转换--java实现

    博客分类:
  • java
阅读更多
public class Test {
	public static void main(String[] args) {
		String s = "简介";
		String tt = gbEncoding(s);
		System.out.println(decodeUnicode(tt));
	}


	public static String gbEncoding(final String gbString) {
		char[] utfBytes = gbString.toCharArray();
		String unicodeBytes = "";
		for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) {
			String hexB = Integer.toHexString(utfBytes[byteIndex]);
			if (hexB.length() <= 2) {
				hexB = "00" + hexB;
			}
			unicodeBytes = unicodeBytes + "\\u" + hexB;
		}
		System.out.println("unicodeBytes is: " + unicodeBytes);
		return unicodeBytes;
	}

	public static String decodeUnicode(final String dataStr) {
		int start = 0;
		int end = 0;
		final 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);
			}
			char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
			buffer.append(new Character(letter).toString());
			start = end;
		}
		return buffer.toString();
	}
}
分享到:
评论
3 楼 mikey_5 2013-02-17  
谢谢,其实转换成汉字只需要这样子:

String str = "\u8BF7\u5148\u767B\u5F55";

		System.out.println("转为汉字是:" + str);
2 楼 hw1287789687 2011-11-26  
package com.kingbase.unicode2chinese;

import com.isch.zh.hw.util.IsChineseUtil;

//import com.isch.zh.hw.util.IsChineseUtil;

public class Conversion {
	/**
	 * 中文转-->unicode
	 * 
	 * @param str
	 * @return 反回unicode编码
	 */
	public static String chinaToUnicode(String str) {
		StringBuffer result = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			int chr1 = (char) str.charAt(i);
			result.append("\\u" + Integer.toHexString(chr1));

		}
		return result.toString();
	}

	/**
	 * unicode转-->中文
	 * 
	 * @param str
	 * @return 中文
	 */
	/*
	 * public static String unicodeToChinese(String str) { StringBuffer sb = new
	 * StringBuffer(); for (char c : str.toCharArray()) { sb.append(c); } return
	 * sb.toString(); }
	 */
	public String abc() {
		return "abc";
	}
	/**
	 * 把unicode转化为中文
	 * @param str
	 * @return
	 */
	public static String unicodeToChinese(String str) {
		if (IsChineseUtil.isHasChinses2(str))//判断是否有中文字符
			return str;
		if (str.indexOf("\\u") == -1 || str == null || "".equals(str.trim())) {/*若不是unicode,则直接返回*/
			return str.replaceAll("\\\\ ", " ");//删掉英文中的\,such as "default\ value1"
			/* 主要是针对 zk 中的国际化问题 */
		}
		StringBuffer sb = new StringBuffer();
		if(!str.startsWith("\\u")){/*若开头不是unicode,如“abc\u4e2d\u56fd” */
			int index=str.indexOf("\\u");
			sb.append(str.substring(0, index));
			str=str.substring(index);
		}
		if (str.endsWith(":")) /*如“\u4e2d\u56fd:” */{
			str = str.substring(0, str.length() - 1);
		}
		String[] chs = str.trim().split("\\\\u");
		
		for (int i = 0; i < chs.length; i++) {
			String ch = chs[i].trim();
			if (ch != null && !"".equals(ch)) {

				sb.append((char) Integer.parseInt(ch.substring(0, 4), 16));
				if (ch.length() > 4) {
					sb.append(ch.substring(4));
				}
			}
		}
		return sb.toString();
	}

	public static void main(String args[]) {
//		// unicode转中文
//		String str = "\u9ec42";
//		Conversion con = new Conversion();

//		System.out.println(con.unicodeToChinese(str));
		// System.out.println(Character.charCount(0x9ec4));
		// for(char c : str.toCharArray())
		// System.out.print(c);
		// System.out.println((char)Integer.parseInt("9ec4",16));

	}

	public static String resolveUnicode(String oldValue, boolean isToUnicode) {
		if (isToUnicode) {
			return chinaToUnicode(oldValue);
		} else {
			return unicodeToChinese(new String(oldValue));
		}
	}

}

1 楼 xiaoyiz 2010-01-08  
\u8BF7\u9009\u62E9\u5DE5\u7A0B\u6216\u6587\u4EF6 很长的时候会报错。。。

相关推荐

Global site tag (gtag.js) - Google Analytics