Servlet表单乱码

路小磊 发布于 2014/07/03 12:00
阅读 341
收藏 0

在做一个Servlet小的Demo(Tomcat,Windows下),一个表单中有个中文字段,到getParameter的时候乱码了(一堆问号),页面什么的全部是utf8,我做了以下修改

request.setCharacterEncoding("utf8")      失败了,还是乱

然后我new String(value.getBytes("ISO-8859-1"), "utf8")成功了……

难道表单提交全部encode成ISO-8859-1了?难道我以后写代码要加上这句恶心的转码么……有没有什么好的方法或者哪位大侠给解释下这个原理,不胜感激。 

加载中
0
路小磊
路小磊

感谢楼上的回答,问题已经解决了。是因为我在调用我在调用setCharacterEncoding方法之前,调用了getParameter方法,导致字符集改变失败。共勉。

对于一楼方法可以解决Get请求编码问题,但是由于牵涉到Servlet容器,不灵活,表示不推荐,Get请求参数中文问题推荐二楼方法。 

三楼方法是加字符编码过滤器,您给的是Spring的过滤器,本质上还是request.setCharacterEncoding和response.setCharacterEncoding方法,可以自己加。

四楼说的稍微简单了点儿,但是我能明白,综合大家说的就可以解决。感谢回答的每位童鞋~


路小磊
路小磊
回复 @TonyJian : 貌似Jetty也得设置吧,地方不一样
TonyJian
TonyJian
其他中间件根本不需要设置,只有tomcat需要
1
TonyJian
TonyJian
server.xml添加URIEncoding
1
纳兰清风
纳兰清风
因为http url是 ISO-8859-1编码,所以用getParameter从url中获取到的参数ISO-8859-1编码,需要转换成约定的编码
0
N
Neal1989

你可以参考一下这个: 其实就是加一个filter 就好了

<filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

0
PengKangde
PengKangde
使用post提交
0
泡泡猪

同样的问题已解决,灰常感谢


返回顶部
顶部