Java Web 开发中文乱码的解决方式

来源:互联网 发布:明朝三百年 知乎 编辑:程序博客网 时间:2024/06/02 03:15
POST乱码
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

filter只对POST方式有效----(猜测,没看过源代码,但是在我的使用过程中对GET方式无效)

GET方式
URL默认是ISO-8859-1 字符集
(不排除应用服务器的其他设置)

不要使用spring里面自动生成的对象,从HttpServletRequest里面取


String?? mytext?? =?? java.net.URLEncoder.encode("中国",?? "utf-8");?
String?? mytext2?? =?? java.net.URLDecoder.decode(mytext,?? "utf-8");?

在同一页面中
mytext: %E4%B8%AD%E5%9B%BD
mytex2: 中国?

但是
当String mytext = java.net.URLEncoder.encode("中国",?? "utf-8");在第一个first.jsp中,?
后通过action="second.jsp?zhongguo=<%=mytext%>">传给第二个JSP时,?
在第二个jsp中我这样接收:
String zhongguo = java.net.URLDecoder.decode(request.getParameter("zhongguo"), "utf-8");?

这样子的话,,zhongguo : ??????
得到的就是乱码,这是为什么?

解决方法? UTF-8? --------->ISO-8859-1-------------->UTF-8

写法一
String?? zhongguo = new String(request.getParameter("zhongguo").getBytes("ISO-8859-1 "));
zhongguo=java.net.URLDecoder.decode(zhongguo,"utf-8");

写法二
str = request.getParameter("str");
str = new String(str.getBytes("ISO-8859-1"), "UTF-8");