码迷,mamicode.com
首页 > 其他好文 > 详细

十六进制Unicode编码字符串与中文字符串的相互转换

时间:2015-04-22 07:15:39      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:android   unicode转汉字   编码   

图书馆客户端项目中遇到的一个问题,得到的URL 是这样的

 String baseurl =   "http://innopac.lib.xjtu.edu.cn/availlim/search~S1*chx?/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ&extended=0&SUBKEY=%E8%92%8B%E4%BB%8B%E7%9F%B3/51%2C607%2C607%2CB/browse"


如果直接使用此URL发送httpget请求,会报异常:非法字符。即URL中不能包含有{}

{}括号中到底是什么内容,最后发现是汉字的十六进制Unicode编码,上面的{u848B}{u4ECB}{u77F3}便是汉字“蒋介石”。

这就需要将十六进制Unicode编码字符串转成中文字符串了。具体代码如下:

/**
	 * 把中文字符串转换为十六进制Unicode编码字符串
	 * 
	 * @param s
	 *            中文字符串
	 * @return
	 */
	public static String stringToUnicode(String s) {
		String str = "";
		for (int i = 0; i < s.length(); i++) {
			int ch = (int) s.charAt(i);
			if (ch > 255)
				str += "\\u" + Integer.toHexString(ch);
			else
				str += "\\" + Integer.toHexString(ch);
		}
		return str;
	}

	/**
	 * 把十六进制Unicode编码字符串转换为中文字符串, 将\u848B\u4ECB\u77F3转化成蒋介石,注意格式
	 * 
	 * @param str
	 *            eg:\u848B\u4ECB\u77F3
	 * @return 蒋介石
	 */
	public static String unicodeToString(String str) {

		Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");

		Matcher matcher = pattern.matcher(str);

		char ch;

		while (matcher.find()) {

			ch = (char) Integer.parseInt(matcher.group(2), 16);

			str = str.replace(matcher.group(1), ch + "");

		}

		return str;

	}


然后处理这个URL,思路也很简单,首先将URL中的“}”替换成“”,然后将“{”替换成“\\”,然后便是将其中的\u848B\u4ECB\u77F3转成汉字

<pre name="code" class="java">/**
	 * 替换掉URL中的{}为\,然后将其中的Unicode 转成汉字
	 * 
	 * @param baseUrl
	 *            String baseurl =
	 *            "http://innopac.lib.xjtu.edu.cn/availlim/search~S1*chx?/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ&extended=0&SUBKEY=%E8%92%8B%E4%BB%8B%E7%9F%B3/51%2C607%2C607%2CB/browse"
	 *            ;
	 * @return
	 */
	public static String replaceUni2Chinese(String baseUrl) {

		Log.d(TAG, "原始URL-->" + baseUrl);
		if (baseUrl.contains("{")) {

			Log.d(TAG, "原始URL中包含汉字");

			String removeLast = baseUrl.replace("}", "");
			// System.out.println("去除后括号-->" + removeLast);

			String replaceBefore = removeLast.replace("{", "\\");
			// System.out.println("替换前括号-->" + replaceBefore);

			String result = unicodeToString(replaceBefore);
			Log.d(TAG, "unicode转成字符串后:-->" + result);

			return result;
		} else {
			Log.d(TAG, "原始URL中没有汉字");
			return baseUrl;
		}

	}




十六进制Unicode编码字符串与中文字符串的相互转换

标签:android   unicode转汉字   编码   

原文地址:http://blog.csdn.net/leokelly001/article/details/45186189

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!