【问题标题】:HttpServletRequest UTF-8 Encoding [duplicate]HttpServletRequest UTF-8 编码 [重复]
【发布时间】:2013-05-07 19:30:45
【问题描述】:

我想从请求中获取我的参数(带有重音符号的字符),但它不起作用。我尝试使用request.setCharacterEncoding("UTF-8"),但它也不起作用。

我知道URLDecoder.decode(request.getQueryString(), "UTF-8") 返回正确的字符,但request.getParameterValues() 不起作用!

有人有想法吗?

【问题讨论】:

    标签: java encoding utf-8 httprequest


    【解决方案1】:

    如果您使用的是 Apache Tomcat,request.setCharacterEncoding("UTF-8") 仅适用于 POST 请求。

    对于GET 请求,您需要在<Connector>server.xml 中添加URIEncoding="UTF-8"

    FAQ/CharacterEncoding - Apache Tomcat wiki space 中查看更多信息。

    【讨论】:

    • WebSphere Application Server 怎么样?我可以知道 server.xml 位于 WAS 中的哪个文件夹吗?我搜索了整个,发现有很多server.xml。
    • 使用 WebSphere,您需要使用系统属性client.encoding.override。见ibm.com/support/knowledgecenter/en/ssw_i5_54/rzatz/51/admin/…
    • @PaulVargas 您好,您提供的链接现已失效,返回 404。您能否更新资源?谢谢!
    • @SajibAcharya 嗨! ——感谢提醒。显然,某种migration。但我们可以在Archive.org 看到原件
    【解决方案2】:

    Paul 的建议似乎是最好的做法,但如果您要解决它,则根本不需要 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 编码。

    【讨论】:

    • 对于所有未来的读者,请注意这是一种解决方法,而不是解决方案。事实上,这是一个非常糟糕的问题,它会让你的 webapp 变得脆弱且不可移植。
    【解决方案3】:

    好吧,我找到了解决问题的方法,我想这不是更好的解决方案,但它确实有效..

      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,我之前没有回答你,但我已经做了这些事情。无论如何感谢您的帮助。

    【讨论】:

    • 来自 Paul 的回答,我可以知道 server.xml 位于 WAS 中的哪个文件夹吗?我搜索了整个,发现有很多server.xml。
    • 为我工作,谢谢。我无法修改 Tomcat 服务器,所以这是完美的 :)
    猜你喜欢
    • 2016-09-22
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2013-05-11
    • 2012-09-11
    • 2016-12-23
    相关资源
    最近更新 更多