JavaWeb--中文乱码小结
JavaWeb--中文乱码小结
出处:http://chriszz.sinaapp.com
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");
/******************************************************************************/
经过@小沫9的提醒,我写了一个编码过滤器 EncodingFilter.java,并在web.xml中进行了配置。通过测试,jsp提交表单到jsp页面、jsp提交表单到servlet、 jsp使用传递参数、Servlet页面用out对象输出,每种情况都可以不再设定 request.setCharacterEncoding(“UTF-8″),因为过滤器已经搞定了一切编码。代码入下:
package chris.filter import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class PageEncodingFilter implements Filter{ private String encoding = "UTF-8";
protected FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
//本过滤器默认编码是UTF-8,但也可以在web.xml配置文件里设置自己需要的编码
if(filterConfig.getInitParameter("encoding") != null)
encoding = filterConfig.getInitParameter("encoding");
} public void doFilter(ServletRequest srequset, ServletResponse sresponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)srequset;
request.setCharacterEncoding(encoding);
HttpServletResponse response = (HttpServletResponse)sresponse;
response.setCharacterEncoding(encoding);
filterChain.doFilter(srequset, sresponse);
} public void destroy() {
this.encoding = null;
} }
相应地,我在web.xml中的filter则设定为:
<filter>
<filter-name>Encoding</filter-name>
<filter-class>chris.filter.PageEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JavaWeb--中文乱码小结的更多相关文章
- JQuery和JSON方式参数传递并处理JAVAWEB中文乱码问题
本文主要讲springMVC中视图和控制器之间常用的两种传递参数的方式: 1.JQuery 2.JSON 一.JQuery方式 思路:单击按钮后,触发JQuery事件,而提交整个表单 JSP中 < ...
- JavaWeb中文乱码问题解决思路
1.提交页面请求或者服务器端的响应时,需要确保页面编码当时与服务器编码方式是否一致. 2.对于从服务器写入数据库中的数据和从数据库中读取到服务器中的数据,需要确保服务器编码方式与数据库编码方式是否一致 ...
- Javaweb中文乱码问题
request.setCharacterEncoding("utf-8");必须写在获得参数之前,即request.getParameter();之前
- Javaweb项目中文乱码
Javaweb项目中文乱码 一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat: ...
- JavaWeb——Get、Post请求中文乱码问题
最近在重温JavaWeb基础内容,碰到了之前也时常遇到的中文乱码问题,想着反正是经常要处理的,不如当即就把它整理出来放在博客里,省得遇到时再去到处搜. 1. Post请求乱码的解决方案: 手工创建一个 ...
- JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码
JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码 准备条件:一个创建好的 JavaWeb 项目 步骤: 1.创建一个类并实现 Filter 接口 import javax.ser ...
- javaweb回顾第十一篇过滤器(附实现中文乱码问题)
1:过滤器概念 过滤器就是一种在请求目标资源的中间组件,比喻把污水转换成纯净水中间需要一个污水净化设备,那么这个设备就好比一个过滤器.那么我用图来表示过滤器(可以有多个过滤器)运行的过程 2:Filt ...
- JSP中文乱码问题解决方法小结
在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱 码问题以及解决方法. 1.JSP页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要 ...
- [转]mysql导入导出数据中文乱码解决方法小结
本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 ...
- JavaWeb之response响应中文乱码问题
response向页面响应中文乱码问题 字节流 * 有可能乱码,与中文转换成字节数组.浏览器打开的默认字符编码有关 * 解决方式:将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致 re ...
随机推荐
- git<Commit和Push的区别>
git作为支持分布式版本管理的工具,它管理的库(repository)分为本地库.远程库. git commit操作的是本地库,git push操作的是远程库. git commit是将本地修改过的文 ...
- Chapter8(IO库) --C++Prime笔记
1.IO对象不能拷贝或对IO对象赋值,进行IO操作的函数通常是以引用方式传递和返回流. 2.一个流一旦发生错误,其上的后续的IO操作都会失败.代码通常应该在使用一个流之前检查它是否处于良好状态.确定一 ...
- Python高手之路【十一】python基础之面向对象
创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数, ...
- P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...
- HDU 2176 基础NIM 输出方案
普通的NIM,然后问先手必胜第一次操作后的所有局面. 对于一个必胜局面只要转变局面SG值为必败(SG=0)留给后手就行了. /** @Date : 2017-10-13 21:39:13 * @Fil ...
- AspNetPager + GridView + ASP.NET AJAX 分页无刷新实现
准备资源: AspNetPager 下载网址:http://www.webdiyer.com/download/default.aspx ASP.NET AJAX 下载网址:http://www.a ...
- bzoj1485 有趣的数列
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1485 [题解] Catalan数,注意不能直接用逆元,需要分解质因数. # include ...
- Python练习-sys.argv的无聊用法
代码如下: # 编辑者:闫龙 #将三次登陆锁定的作业改为: # python login.py -u alex -p 123456 输入的形式 # (-u,-p是固定的,分别代表用户名和密码) imp ...
- base64 与字符串互转
#region 将Base64编码的文本转换成普通文本 /// <summary> /// 将Base64编码的文本转换成普通文本 /// </summary> /// < ...
- 更改arch的默认终端
实在是厌倦了gnome的资源管理器nautilus和终端gnome-terminal,于是卸载之,然后更换了xfce4的终端,但是出现了一个问题,那就是在资源管理器中使用邮件打开终端的时候打不开了,解 ...