最近有同事问http url中或者cookie中被译码的中文怎么被转换回来。
我们知道用jdk自带的:native2ascii 可以将中文和unicode来回转的,但是java里怎么搞呢。
这里记录下简单的装换方式
例如有中文 “测试中文转换”
用native2ascii 生成的unicode 如下
\u6d4b\u8bd5\u4e2d\u6587\u8f6c\u6362
然后这个编码如果再被url encode下就会变为这样
%5Cu6d4b%5Cu8bd5%5Cu4e2d%5Cu6587%5Cu8f6c%5Cu6362
在java里可以借助一些辅助类 将
%5Cu6d4b%5Cu8bd5%5Cu4e2d%5Cu6587%5Cu8f6c%5Cu6362 还原为 “测试中文转换”
或者将 \u6d4b\u8bd5\u4e2d\u6587\u8f6c\u6362 还原为 “测试中文转换”
首先java里对应的url encode类是
URLEncoder 和 URLDecoder
从unicode到 中文可以使用apache下的common-lang里的 StringEscapeUtils.unescapeJava方法。
例如需要将url encode后的字符串还原到 中文的话 需要如下的调用
String abc="%5Cu6d4b%5Cu8bd5%5Cu4e2d%5Cu6587%5Cu8f6c%5Cu6362"; String bbc=URLDecoder.decode(abc); System.out.println(bbc); String cbc= org.apache.commons.lang.StringEscapeUtils.unescapeJava(bbc); System.out.println(cbc);