博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb--中文乱码小结
阅读量:7237 次
发布时间:2019-06-29

本文共 3081 字,大约阅读时间需要 10 分钟。

JavaWeb--中文乱码小结

出处:
0.纯粹html乱码:
换个editor吧(有时候notepad都比sublime_text好用),最好是在<head></head>之间添加<meta charset="utf-8">
1.jsp到jsp之间,表单
(假设包含表单的页面为a,提交的action为b)
get:不乱码
post:乱码(在b页面用<%request.setCharacterEncoding("utf-8");%>)
超链接形式的跳转,如果带有参数,本质上还是get方法,所以不会乱码
2.jsp到jsp之间,转发,转发参数乱码(<jsp:forward>+<jsp:param>)
需要在转发标签<jsp:forward>之前添加<%request.setCharacterEncoding("utf-8");%>
3.servlet页面out对象输出中文,乱码
在相应的方法中添加response.setContentType("text/hmtl;charset=UTF-8");
4.jsp提交表单到servlet,servlet获取表单变量乱码
若表单是post方法:在servlet相应方法中添加request.setCharacterEncoding("UTF-8");
若表单是get方法:在servlet相应方法中添加request.setCharacterEncoding("UTF-8");,或者用getBytes转码并构造新的String,例如;
String username = request.getParameter("username");
String name = new String(username.getBytes("ISO-8859-1"), "UTF-8");
总结一下:
对于post方法提交的表单,获取表单数据的页面都要用request.setCharacterEncoding("UTF-8");对于get方式提交的表单,获取表单数据的页面既可以用request.setCharacterEncoding("UTF-8")也可以用getBytes()的方法构造新的String;对于使用<jsp:param>传递参数的情况,需要在传递参数前设定request.setCharacterEncoding("UTF-8");

/******************************************************************************/

经过的提醒,我写了一个编码过滤器 EncodingFilter.java,并在web.xml中进行了配置。通过测试,jsp提交表单到jsp页面、jsp提交表单到servlet、 jsp使用传递参数、Servlet页面用out对象输出,每种情况都可以不再设定 request.setCharacterEncoding(“UTF-8″),因为过滤器已经搞定了一切编码。代码入下:

1 package chris.filter 2  3 import java.io.IOException; 4  5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException; 9 import javax.servlet.ServletRequest;10 import javax.servlet.ServletResponse;11 import javax.servlet.http.HttpServletRequest;12 import javax.servlet.http.HttpServletResponse;13   14 public class PageEncodingFilter implements Filter{  15   16     private String encoding = "UTF-8";  17     protected FilterConfig filterConfig;  18       19       20     public void init(FilterConfig filterConfig) throws ServletException {  21         this.filterConfig = filterConfig;  22         //本过滤器默认编码是UTF-8,但也可以在web.xml配置文件里设置自己需要的编码  23         if(filterConfig.getInitParameter("encoding") != null)  24             encoding = filterConfig.getInitParameter("encoding");  25     }  26   27     public void doFilter(ServletRequest srequset, ServletResponse sresponse,  28             FilterChain filterChain) throws IOException, ServletException {  29         HttpServletRequest request = (HttpServletRequest)srequset;  30         request.setCharacterEncoding(encoding);31         HttpServletResponse response = (HttpServletResponse)sresponse;32         response.setCharacterEncoding(encoding);33         filterChain.doFilter(srequset, sresponse);  34     }  35       36     public void destroy() {  37         this.encoding = null;  38     }  39   40 }

 

相应地,我在web.xml中的filter则设定为:

1 
2
Encoding
3
chris.filter.PageEncodingFilter
4
5
encoding
6
UTF-8
7
8
9 10
11
Encoding
12
/*
13

 

转载地址:http://ydgfm.baihongyu.com/

你可能感兴趣的文章
Linux环境thinkphp配置以及数据源驱动改动
查看>>
C语言之基本算法11—牛顿迭代法求平方根
查看>>
Concurrency and Application Design
查看>>
vuethink 在本地没问题,在服务器报错 , php5.6与php5.5之间的大坑
查看>>
11.使用 package.json
查看>>
idea如何设置类头注释和方法注释
查看>>
白盒测试目录导航
查看>>
linux过滤旧文件中的空行和注释行剩余内容组成新文件
查看>>
[LeetCode] Preimage Size of Factorial Zeroes Function 阶乘零的原像个数函数
查看>>
GraphQL入门1
查看>>
C#委托的介绍(delegate、Action、Func、predicate)
查看>>
巧用Scrum与Kanban
查看>>
质量报告之我见
查看>>
微信域名weixin.com天价成交!是腾讯吗?
查看>>
C#实现远程机器管理
查看>>
Android生成带图片的二维码
查看>>
jQuery对表单、表格的操作及更多应用(下:其他应用)
查看>>
[.net 面向对象编程基础] (21) 委托
查看>>
阶乘相关问题
查看>>
ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
查看>>