开发者社区> 问答> 正文

非常细节:关于Servlet中文编码的一个问题:配置报错 

request.setCharacterEncoding("UTF-8"); 上面这个方法,相信所有用Java编写web应用的时候都会用过。但是你知道这个方法使用上有什么注意事项吗? 你必须让这个方法在所有 getParameter 和 getParameterXxxx 之前调用,如果你的代码有如下行为: String id = request.getParameter("id"); request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); 假设这个name是一个中文参数,那么在IE浏览器下,name值就是乱码,而 FireFox 正常。 我在 TomcatResin 下都测试过这个问题,一样的效果。 因此,你必须保证 setCharacterEncoding 在获取参数之前被调用,否则无效。 至于为什么 FireFox 是正常的,而 IE 则不行呢? 你不妨跟踪一下 request.getCharacterEncoding 这个方法的返回值,在 FireFox 下返回  utf-8 ,而IE返回的是 null 。 这个问题也是导致前两天我更新程序时导致乱码的根本原因。

展开
收起
kun坤 2020-06-02 17:37:14 616 0
1 条回答
写回答
取消 提交回答
  • 最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数######

    引用来自“高庆丰”的帖子

    最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数

     这个参数只是tomcat的吧,那如果我要用resin或jetty怎办??? 最好还是程序层面做,适应所有应用服务器, 最后红薯大哥是怎解决的呢????先得到request 的 encoding??如果为空就给他一个默认值?######

    引用来自“高庆丰”的帖子

    最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数

    这个参数只影响 GET 方式的中文参数,对 POST 方式是无效的。######

    引用来自“红薯”的帖子

    引用来自“高庆丰”的帖子

    最好的办法是在Connector配置中加上URIEncodeing="utf-8"参数 这个参数只影响 GET 方式的中文参数,对 POST 方式是无效的。 同意 红薯的 说法 , URIEncodeing 的配置只对 GET请求有效。通常写一个单独的过滤器来专门处理请求编码的问题。######文档上写的很清楚了,看了就不会错

    setCharacterEncoding

    public void setCharacterEncoding(java.lang.String env)
                              throws java.io.UnsupportedEncodingException
    Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().
    Parameters:
    a -  String containing the name of the chararacter encoding.
    Throws:
    java.io.UnsupportedEncodingException - if this is not a valid encoding
    ######resin:  <web-app-default>     <character-encoding>UTF-8</character-encoding> </web-app-default> jetty应该也有类似的设置
    2020-06-02 17:52:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载