Tomcat的request.getParameter()将%<hex>转换为unicode替换字符

时间:2016-09-12 12:19:36

标签: tomcat servlets character-encoding

这是一个旧的Web应用程序,无法与当前的Tomcat一起正常运行。也许它确实适用于古代的,我不知道。

无论如何,servlet的request.getParameter("query")中出现了doGet()错误,request.toString()的结果如下:

uri: /library/indextable
method: GET
QueryString: mode=1&type=7&query=%B3omozik
Parameters:
    Name: mode  Value: 1
    Name: type  Value: 7
    Name: query Value: �omozik
Headers:
    Name: host  Value: localhost:8084
    Name: user-agent    Value: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
    Name: accept    Value: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Name: accept-language   Value: en-US,en;q=0.5
    Name: accept-encoding   Value: gzip, deflate
    Name: referer   Value: http://localhost:8084/library/indextable?mode=1&type=7
    Name: cookie    Value: JSESSIONID=6FECF93B858C3AE3318C359DEE4C9EC5
    Name: connection    Value: keep-alive

字符 实际上是\ ufffd,Unicode的替换字符。无论出于何种原因,URL的%B3(ISO-8859-2's)都会被翻译成它。包含相应GET表单的网页具有标记

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-2">

使用区域设置pl_PL.ISO8859-2运行Tomcat。

方法request.setCharacterEncoding()返回null,除非 在request.setCharacterEncoding("ISO-8859-2")的开头指定了request.setCharacterEncoding("UTF-8")doGet(),但这两个都没有帮助。

如何让请求对象将十六进制标记的ISO 8859-2字符转换为Unicode字符(例如%B3到ł)?这是遗留代码,它只需要处理可能是最小的修复,没有最佳实践和优雅。

0 个答案:

没有答案