3

我有一个接收一些 POST 数据的 servlet。因为此数据是 x-www-form-urlencoded,所以诸如 sabon 之类的字符串将被编码为 サボテン。

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

我想取消编码的原因是,在我在网页上显示这些数据之前,我将 & 转义为 & 目前,它正在转义编码字符串中的 &s,因此字符无法正确显示。

4

4 回答 4

5

这些不是 URL 编码。它看起来像%E3%82%B5%E3%83%9C%E3%83%86%E3%83%B3。这些是十进制 HTML/XML 实体。要取消转义 HTML/XML 实体,请使用Apache Commons Lang StringEscapeUtils


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

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

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

于 2011-01-10T22:51:49.137 回答
1

这是浏览器的功能/错误。如果网页是有限的字符集,比如 ASCII,并且用户在表单字段中输入了一些字符集之外的字符,浏览器将以以下形式发送这些字符$#xxxx;

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

最好的方法是使用一个涵盖所有字符的字符集,比如 UTF-8,这样浏览器就不会这样做了。

于 2011-01-11T00:03:22.590 回答
0

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

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

如何让 UTF-8 在 Java webapps 中工作?

于 2011-01-10T22:51:30.390 回答
0

正则表达式怎么样?

Pattern pattern = Pattern.compile("&([^a][^m][^p][^;])?");
Matcher matcher = pattern.matcher(inputStr);
String output = matcher.replaceAll("&amp;$1");
于 2011-01-10T22:51:49.357 回答