HttpServletRequest UTF-8编码
我看到很多像我这样的问题,但没有一个答案的作品... 这是事情:我想从请求中获取我的参数(带有口音的字符),但它不起作用。我试图用户request.setCharacterEncoding("UTF-8")
,但它也没有工作。HttpServletRequest UTF-8编码
我知道URLDecoder.decode(request.getQueryString(), "UTF-8")
返回我的权利字符,但request.getParameterValues()
不起作用! 有没有人有想法?
谢谢
保罗的建议似乎是最佳行动过程,但如果你要解决它,你并不需要的URLEncoder或URLDecoder都:
String item = request.getParameter("param");
byte[] bytes = item.getBytes(StandardCharsets.ISO_8859_1);
item = new String(bytes, StandardCharsets.UTF_8);
// Java 6:
// byte[] bytes = item.getBytes("ISO-8859-1");
// item = new String(bytes, "UTF-8");
更新:由于这是得到大量的选票,我想强调BalusC的观点,这绝对不是一个解决方案;这是一个最好的解决方法。人们不应该这样做。
我不知道到底是什么原因引起的问题,但我怀疑这个URL已经是UTF-8编码了,然后又是UTF-8编码了。
如果您正在使用Apache Tomcat,request.setCharacterEncoding("UTF-8")
只有POST
要求的作品。
对于GET
请求,您需要在的<Connector>
上添加URIEncoding="UTF-8"
。
WebSphere Application Server如何?我可否知道server.xml位于WAS中的哪个文件夹?我搜索整个,发现有很多server.xml。 – 2016-04-06 06:46:55
对于WebSphere,您需要使用系统属性'client.encoding.override'。请参阅https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzatz/51/admin/help/trun_svr_utf.html – 2017-12-26 19:32:05
嗯,我找到了一种方法来解决我的问题,我想这是不是更好的解决方案,但它确实工作..
String item = request.getParameterValues("param"); // Hélène
item = URLEncoder.encode(model.getNameItem(), "ISO-8859-1"); // H%C3%A9l%C3%A8ne
item = URLDecoder.decode(item, "UTF-8"); // and finally : Hélène
如果它可以帮助别人,我很乐意帮助: )
PS:保罗,我以前没有回答你,但我已经做了这些事情。无论如何,感谢您的帮助。
从Paul答复,我可以知道server.xml位于WAS中的哪个文件夹?我搜索整个,发现有很多server.xml。 – 2016-04-06 06:47:49
为我工作,thx。我无法修改Tomcat服务器,所以这是完美的:) – 2016-09-27 15:09:58
对于所有未来的读者,请注意,这是一种解决方法,而不是解决方案。事实上,这是一个非常糟糕的问题,它会让你的webapp变得脆弱和不可移植。 – BalusC 2014-12-27 10:07:03
你说得对,谢谢指出!也帮助我解决问题 – Broccoli 2017-02-25 19:51:40