Java中文jsp页面被转码了_JSP中文乱码问题终极解决方案
转载自: http://www.cnblogs.com/beijiguangyong/
http://www.cnblogs.com/beijiguangyong/archive/2012/03/31/2437124.html
在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。下面来逐一解决其中的乱码问题。
一、JSP页面中文乱码
在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。
先看一个JSP程序:
中文显示示例
这是一个中文显示示例:
String str = "中文";
out.print(str);
%>
上面这个JSP程序看起来好像是在页面显示几句中文而且标题也是中文。运行后在浏览器中显示如图所示
原因在于没有在JSP中指定页面显示的编码,消除乱码的解决方案很简单上面代码中page命令修改成如下所示即可
中文显示示例
这是一个中文显示示例:
String str = "中文";
out.print(str);
%>
再次运行乱码消失,原理就是向页面指定编码为GB2312,那么页面就会按照此编码来显示,于是乱码消失。
二、URL传递参数中文乱码
一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。
下面是一个示例程序
URL传递参数中文处理示例
String param = request.getParameter("param");
%>
请点击这个链接
你提交的参数为:
上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,这个程序的运行效果如下图
对于URL传递中文参数乱码这个问题,其处理方法比较特殊,仅仅转换这个中文字符串或者设置JSP页面显示编码都是不能解决问题的,需要修改Tomcat服务器的配置文件才能解决问题。在这里修改Tomcat的conf目录下的server.xml配置文件,具体改后的代码如下
connectionTimeout="20000"
redirectPort="8443" />
在原来代码中添加URI编码设置URIEncoding=“gb2312”即可,重启Tomcat服务器可以得到正确的页面。其原理也和上面的情况类似,就是向程序指明编码类型,然后显示就正常了。
三、表单提交中文乱码
对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。
示例代码如下
Form中文处理示例
下面是表单内容:
用户名:
密 码:
在上面的表单当中想AcceptFormCharset这个页面提价两项数据,下面是AcceptFormCharset.jsp的内容:
contentType="text/html;charset=gb2312"%>
Form中文乱码
下面是表单提交以后用request取到的表单数据:
String userName = request.getParameter("userName");
String password = request.getParameter("password");
out.println("表单输入userName的值:" + userName + "
");
out.println("表单输入password的值:" + password + "
");
%>
在上面的程序中,如果表单输入没有中文,则可以正常的显示当输入的数据中有中文的时候,得到的结果如图所示。
产生种结果的原因是Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。对于这个问题可以采用转换编码格式的方法来解决,现在对AcceptFromCharset这个页面改动如下:
contentType="text/html;charset=gb2312"%>
Form中文乱码
下面是表单提交以后用request取到的表单数据:
String userName = request.getParameter("userName");
String password = request.getParameter("password");
out.println("表单输入userName的值:" + new String(userName.getBytes("ISO-8859-1"), "gb2312")+ "
");
out.println("表单输入password的值:" + new String(password.getBytes("ISO-8859-1"), "gb2312")+ "
");
%>
经过这样的转换编码以后,所有的中文输入都可以用request对象正常取出。在上面这个程序中,第四行和第五行是转换编码格式的关键,先从ISO-8859-1格式的字符串中取出字节内容,然后在用GB2312的编码格式重新构造一个新的字符串。这样就可以支持中文变淡输入的正常取值和显示。改进以后程序运行结果如下
经过上面的更改编码格式的处理,表单的中文输入乱码问题已经得到解决。但是如果上面的表单中的输入项不止是两个,那么每个输入项都需要进行编码转换,那样就很麻烦了。这是我们就用到了大名鼎鼎的过滤器filter了。关于这里的内容大致的思虑和上面的一样具体做法请参照笔者的另一篇文章。
四、Eclipse中JSP文件中文乱码
在Eclipse或者MyEclipse中由于默认的JSP编码格式为ISO-8859-1,所以当打开由其他编辑器编辑的JSP文件时会出现乱码,如图所示
对于这个问题我们只需要更改一下Eclipse或者是MyEclipse中对JSP的默认编码就可以了,修改的地方(我的MyEclipse版本为11)如图所示
PS
在Eclipse或者MyEclipse当中JSP文件默认的编码为ISO-8859-1,所以在JSP代码中间如果出现中文就不能保存,例如如下代码
中文显示示例
这是一个中文显示示例:
String str = "中文";
out.print(str);
%>
修改后在保存的时候会提示如下:
现这个提示的原因在于JSP源文件中有ISO=8859-1编码无法识别的中文字符,对于这个问题,解决办法就是在JSP页面中声明页面编码格式即可。声明后代码如下:
中文显示示例
这是一个中文显示示例:
String str = "中文";
out.print(str);
%>
其中第一行中pageEncoding=“gb2312”指明了JSP页面编码采用GB2312,这样就可以正常保存JSP的源文件了。
遇到问题首先分析问题出现的原因,只有知道了原因才能去解决,学习分析问题的来源远比解决这个问题重要的多。
乱码问题的原因就是程序(Eclipse也好,浏览器也罢)的编码没有和编程人员的编码进行统一,(就像你和一个不懂中文的人用中文交流他当然不懂了)那么解决这个问题只需要将编程人员想要的编码告诉程序就可以了,以上解决乱码问题的种种方法都可以说是一种声明编码的过程,也就是说乱码问题终极解决方案就是:转码。这里的转码要么是编程人员手动转,要么就是声明一下让程序去转,换句话说就是:和不懂中文的交流,要么让他学中文,要么你就去学习他的语言。
生活就是编程,编程就是生活,同之,通之!!!
Java中文jsp页面被转码了_JSP中文乱码问题终极解决方案相关推荐
- idea环境下 servlet配置导致jsp页面显示源码问题
idea环境下 servlet配置导致jsp页面显示源码问题 今天在做jsp实验(虽然是被废弃的技术但是还是课程要求)过程中遇到了一点令人感到困惑的问题:当使用idea自动生成的web.xml文件配置 ...
- JSP中文乱码问题终极解决方案(转)
JSP中文乱码问题终极解决方案 http://www.cnblogs.com/beijiguangyong/archive/2012/03/31/2437124.html 在介绍方法之前我们首先应该清 ...
- JSP中文乱码问题终极解决方案
在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码.参数乱码.表单乱码.源文件乱码.下面来逐一解决其中的乱码问题. 一.JSP页面中文乱码 ...
- JSP中文乱码问题终极解决方案(上)
摘要: 本文首先介绍了一个JSP的源文件执行过程,即需要经过三个阶段,两次编码,才能完成一次完整的输出.特别需要注意的是,在这个过程中,编码问题贯穿始终.我们知道在JSP/Servlet中,主要有以下 ...
- vim、gvim在windows下中文乱码的终极解决方案
From: http://www.liuhuadong.com/archives/68/index.html vim.gvim在windows下中文乱码的终极解决方案 在windows下vim的中文字 ...
- jsp超链接到java文件,jsp页面超链接传中文终极解决办法
在做web前端页面的时候,经常碰到传中文问题.网上有许多方案,但仍不能根治,最终要用js或者java的encode相关方法. 常规方案有三部: 1.改tomcat的server.xml中URIEnco ...
- Java中文jsp页面_java中文乱码解决之道(七)—–JSP页面编码过程
我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. 在上面代码中有两个地方存在编码:pageEncodi ...
- java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结
jsp页面中获取servlet请求中的参数的办法详解 在JAVA WEB应用中,如何获取servlet请求中的参数,并传递给跳转的JSP页面?例如访问http://localhost:8088/bbs ...
- java中jsp页面foreach遍历输出的使用
需要下载 导入第二个包后不需要设置配置文件 jsp页面中 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/js ...
最新文章
- 在C++中对字符串std::string使用switch/case语句
- Ubuntu 调节屏幕亮度
- Ubuntu 16.04安装Memcached(单机)
- work hard, think harder
- Exchange2003配置垃圾邮件实时黑名单RBL
- 《呐喊》金句摘抄(一)
- qml如何发布程序_首创PC端小程序直播发布会,360如何与手机厂商一起共振?
- 电竞比分源码/免买分源码/可二开/支持最新PHP7.3/LOL,王者,吃鸡等等电竞比分源码
- Android SDK上手指南:项目清单
- python卸载干净_Python卸载不干净?Mac完全卸载python方法
- 项目管理实践之版本控制工具SVN
- 作为技术人员,年会中尽量找熟人喝酒
- 用傅里叶变换求单位原点的格林函数
- linux查看日志相关命令
- 给微信小程序页面加载背景图片解决方案
- 【Unity3D】Tank大战
- PROC FORMAT过程
- Mojave下修复搜狗输入法斗图和标点配对不生效的问题?
- 美国西储大学轴承数据
- 《树莓派项目实战》第七节 使用声音传感器检测有无声音