我有一个接收一些POST数据的servlet。因为这个数据是x-www-form-urlencoded,所以像サボテン这样的字符串将被编码为サボテン。
如何将此字符串取消编码回正确的字符?我尝试过使用URLDecoder.decode("encoded string", "UTF-8");
,但它没有什么区别。
我想取消对它们进行编码的原因是因为,在我在网页上显示这些数据之前,我是逃避&到& amp;目前,它正在转换编码字符串中的& s,因此字符没有正确显示。
答案 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中设置连接器。谷歌在网络上,你会发现大量的点击,如
答案 3 :(得分:0)
正则表达式怎么样?
Pattern pattern = Pattern.compile("&([^a][^m][^p][^;])?");
Matcher matcher = pattern.matcher(inputStr);
String output = matcher.replaceAll("&$1");