如何避免 Java request.getQueryString() 得到转义字符串

How to avoid Java request.getQueryString() get escaped string

我有一个从 JSP 表单处理 QueryString 的 Servlet。

当JSP向Servlet发送信息时,它会URL查询,像这样:

https://www.mywebsite.com/search?query=Barcelona

然后我以这种方式在 Servlet 中接收数据:

String query = request.getQueryString();
// query will receive "Barcelona"

一切正常。当字符串包含来自其他编码(如俄语、中文、阿拉伯语等)的字符时,问题就来了。所以,如果我把 URL 像:

https://www.mywebsite.com/search?query=Медеуский

我将在查询变量中收到以下文本:

String query = request.getQueryString();
// query will receive " %D0%9C%D0%B5%D0%B4%D0%B5%D1%83%D1%81%D0%BA%D0%B8%D0%B9"

那么,我怎样才能避免转义转换呢?

谢谢!

您可以使用URLDecoder.decode(request.getQueryString(), "UTF-8")

  • String unicodeQuery = new String(query.getBytes(), StandardCharsets.UTF_8);
  • String unicodeQuery = new String(query.getBytes("ISO_8859_1"), StandardCharsets.UTF_8);
  • String unicodeQuery = new String(query.getBytes(Charset.defaultCharset()), StandardCharsets.UTF_8);