图书馆客户端项目中遇到的一个问题,得到的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; } }
时间: 2024-11-10 11:18:13