Java中的URL解码日语字符等

时间:2011-01-10 22:46:07

标签: java servlets character-encoding url-encoding

我有一个接收一些POST数据的servlet。因为这个数据是x-www-form-urlencoded,所以像サボテン这样的字符串将被编码为サボテン。

如何将此字符串取消编码回正确的字符?我尝试过使用URLDecoder.decode("encoded string", "UTF-8");,但它没有什么区别。

我想取消对它们进行编码的原因是因为,在我在网页上显示这些数据之前,我是逃避&到& amp;目前,它正在转换编码字符串中的& s,因此字符没有正确显示。

4 个答案:

答案 0 :(得分:5)

那些 URL encodings。它看起来像%E3%82%B5%E3%83%9C%E3%83%86%E3%83%B3。这些是decimal HTML/XML entities。要浏览HTML / XML实体,请使用Apache Commons Lang StringEscapeUtils


根据评论

更新:当响应编码不是UTF-8时,您将收到问号。如果您正在使用JSP,只需将以下行添加到页面顶部:

<%@ page pageEncoding="UTF-8" %>

有关中途this article的解决方案的详细信息,请参阅。我更喜欢使用-UTF8-all-the-way来摆弄正则表达式,因为正则表达式不会让你为世界统治做好准备。

答案 1 :(得分:1)

这是浏览器的功能/错误。如果网页位于有限的字符集中,例如ASCII,并且用户在表单字段中键入字符集外的某些字符,则浏览器将以$#xxxx;

的形式发送这些字符

这可能是一个问题,因为如果用户实际输入$#xxxx;,他们将按原样发送。所以服务器无法区分这两种情况。

最好的方法是使用覆盖所有字符的字符集,例如UTF-8,因此浏览器不会这样做。

答案 2 :(得分:0)

只是一个疯狂的猜测,但你使用的是Tomcat吗?

如果是这样,请确保已使用UTF-8的URIEncoding在Tomcat中设置连接器。谷歌在网络上,你会发现大量的点击,如

How to get UTF-8 working in Java webapps?

答案 3 :(得分:0)

正则表达式怎么样?

Pattern pattern = Pattern.compile("&([^a][^m][^p][^;])?");
Matcher matcher = pattern.matcher(inputStr);
String output = matcher.replaceAll("&amp;$1");