这是一个旧的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到ł)?这是遗留代码,它只需要处理可能是最小的修复,没有最佳实践和优雅。