JSP中文乱码问题终极解决方案

http://www.cnblogs.com/beijiguangyong/archive/2012/03/31/2437124.html

在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。下面来逐一解决其中的乱码问题。

一、JSP页面中文乱码

在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。

先看一个JSP程序:

<%@ page language="java" import="java.util.*" %>
<html>
<head>
<title>中文显示示例</title>

</head> 
<body>
这是一个中文显示示例:
<%
String str = "中文";
out.print(str);
%>
</body>
</html>

上面这个JSP程序看起来好像是在页面显示几句中文而且标题也是中文。运行后在浏览器中显示如图所示

原因在于没有在JSP中指定页面显示的编码,消除乱码的解决方案很简单上面代码中page命令修改成如下所示即可

<%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>中文显示示例</title>

</head>
<body>
这是一个中文显示示例:
<%
String str = "中文";
out.print(str);
%>
</body>
</html>

再次运行乱码消失,原理就是向页面指定编码为GB2312,那么页面就会按照此编码来显示,于是乱码消失。

二、URL传递参数中文乱码

一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。

下面是一个示例程序

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>URL传递参数中文处理示例</title>
</head>
<%
String param = request.getParameter("param");
%>
<body>
<a href="URLCharset.jsp?param='中文'">请点击这个链接</a><br>
你提交的参数为:<%=param%>
</body>
</html>

上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,这个程序的运行效果如下图

对于URL传递中文参数乱码这个问题,其处理方法比较特殊,仅仅转换这个中文字符串或者设置JSP页面显示编码都是不能解决问题的,需要修改Tomcat服务器的配置文件才能解决问题。在这里修改Tomcat的conf目录下的server.xml配置文件,具体改后的代码如下

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="gb2312"
connectionTimeout="20000"
redirectPort="8443" />

在原来代码中添加URI编码设置URIEncoding=“gb2312”即可,重启Tomcat服务器可以得到正确的页面。其原理也和上面的情况类似,就是向程序指明编码类型,然后显示就正常了。

三、表单提交中文乱码

对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。

示例代码如下

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>Form中文处理示例</title>
</head>
<body>
<font size="2">
下面是表单内容:
<form action="AcceptFormCharset.jsp" method="post">
用户名:<input type="text" name="userName" size="10"/>
密 码:<input type="password" name="password" size="10"/>
<input type="submit" value="提交">
</form>
</font>
</body>
</html>

在上面的表单当中想AcceptFormCharset这个页面提价两项数据,下面是AcceptFormCharset.jsp的内容:

<%@ page language="java" import="java.util.*"
contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>Form中文乱码</title>
</head>
<body>
<font size="2"> 下面是表单提交以后用request取到的表单数据:<br>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
out.println("表单输入userName的值:" + userName + "<br>");
out.println("表单输入password的值:" + password + "<br>");
%>
</font>
</body>
</html>

在上面的程序中,如果表单输入没有中文,则可以正常的显示当输入的数据中有中文的时候,得到的结果如图所示。

产生种结果的原因是Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。对于这个问题可以采用转换编码格式的方法来解决,现在对AcceptFromCharset这个页面改动如下:

<%@ page language="java" import="java.util.*"
contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>Form中文乱码</title>
</head>
<body>
<font size="2"> 下面是表单提交以后用request取到的表单数据:<br>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
out.println("表单输入userName的值:" + new String(userName.getBytes("ISO-8859-1"), "gb2312")+ "<br>");
out.println("表单输入password的值:" + new String(password.getBytes("ISO-8859-1"), "gb2312")+ "<br>");
%>
</font>
</body>
</html>

经过这样的转换编码以后,所有的中文输入都可以用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代码中间如果出现中文就不能保存,例如如下代码

<%@ page language="java" import="java.util.*" %>
<html>
<head>
<title>中文显示示例</title>

</head>
<body>
这是一个中文显示示例:
<%
String str = "中文";
out.print(str);
%>
</body>
</html>

修改后在保存的时候会提示如下:

现这个提示的原因在于JSP源文件中有ISO=8859-1编码无法识别的中文字符,对于这个问题,解决办法就是在JSP页面中声明页面编码格式即可。声明后代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="GB2312" %>
<html>
<head>
<title>中文显示示例</title>

</head>
<body>
这是一个中文显示示例:
<%
String str = "中文";
out.print(str);
%>
</body>
</html>

其中第一行中pageEncoding=“gb2312”指明了JSP页面编码采用GB2312,这样就可以正常保存JSP的源文件了。

遇到问题首先分析问题出现的原因,只有知道了原因才能去解决,学习分析问题的来源远比解决这个问题重要的多。

乱码问题的原因就是程序(Eclipse也好,浏览器也罢)的编码没有和编程人员的编码进行统一,(就像你和一个不懂中文的人用中文交流他当然不懂了)那么解决这个问题只需要将编程人员想要的编码告诉程序就可以了,以上解决乱码问题的种种方法都可以说是一种声明编码的过程,也就是说乱码问题终极解决方案就是:转码。这里的转码要么是编程人员手动转,要么就是声明一下让程序去转,换句话说就是:和不懂中文的交流,要么让他学中文,要么你就去学习他的语言。

生活就是编程,编程就是生活,同之,通之!!!

转载于:https://www.cnblogs.com/gongyu/p/3857779.html

JSP中文乱码问题终极解决方案(转)相关推荐

  1. JSP中文乱码问题终极解决方案(上)

    摘要: 本文首先介绍了一个JSP的源文件执行过程,即需要经过三个阶段,两次编码,才能完成一次完整的输出.特别需要注意的是,在这个过程中,编码问题贯穿始终.我们知道在JSP/Servlet中,主要有以下 ...

  2. JSP中文乱码问题终极解决方案

    在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码.参数乱码.表单乱码.源文件乱码.下面来逐一解决其中的乱码问题. 一.JSP页面中文乱码 ...

  3. vim、gvim在windows下中文乱码的终极解决方案

    From: http://www.liuhuadong.com/archives/68/index.html vim.gvim在windows下中文乱码的终极解决方案 在windows下vim的中文字 ...

  4. Java中文jsp页面被转码了_JSP中文乱码问题终极解决方案

    转载自: http://www.cnblogs.com/beijiguangyong/ http://www.cnblogs.com/beijiguangyong/archive/2012/03/31 ...

  5. Tomcat 中 jsp 中文乱码显示处理解决方案

    JSP 中文乱码处理解决方案 初学JSP,尤其是Tomcat环境,经常会因为中文汉字字符集设置问题导致中文乱码,本文就这一问题提出解决方案,解决中文乱码问题,供各位参考,我采用的方案是统一字符集至UT ...

  6. gvim在windows下中文乱码的终极解决方案

    打开vim的配置文件,位置在/etc/vim/vimrc 在其中加入 set encoding=utf-8 set fileencodings=utf-8,gb2312,gbk,gb18030 set ...

  7. python graphviz中文乱码_graphviz画决策树图中文乱码问题终极解决方案

    大家在画决策树的过程中,一定非常希望能画出带有中文特征名称或类别名称的决策树.但我们直接用graphviz画图时,中文却会出现乱码.如下图所示,相信大家都遇见过:在红酒数据集中,将feature_na ...

  8. JSP中文乱码解决方案了解和TOMCAT中文乱码解决

    java 中文乱码终极解决方案 首先,确保你的数据库是支持中文的.把数据库的编码方式设置能支持中文的,如GB2132,utf-8等,而且经过测试后确实能写入中文且正常显示.这样就就保证了数据库确实是支 ...

  9. jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法

    jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...

最新文章

  1. 在linux下,如何在C语言中使用正则表达式
  2. 使用C++对TINY+语言进行词法分析、语法分析、语义分析和中间代码生成
  3. 保护你的Web服务器 iptables防火墙脚本全解读
  4. c语言条件编译include,7.1编译与预处理-include-c学习 | 时刻需
  5. 特征值分解、奇异值分解、PCA概念整理(转载)
  6. web视图引擎框架对比
  7. eclipse上修改js后,浏览器上还是出现原来效果的解决方法
  8. softmax多分类
  9. linux操作系统开机启动,简述linux操作系统启动流程
  10. mysql 命令连接,授权用户
  11. Qt面对高分辨率屏幕的解决方法思考
  12. html 漂浮 广告置顶,jquery浮动图片广告代码_页面上漂浮图片广告代码
  13. access vba代码大全_VBA编程在翻译中的应用
  14. 生产执行系统MES架构设计及应用架构
  15. html svg 线条动画,SVG 线条动画入门
  16. 论文笔记(十八):Object Detection and Spatial Location Method for ... Based on 3D Virtual Geographical Scen
  17. java编写打砖块小游戏
  18. Dynamic Scoping (动态范围)
  19. 【广告计算】互联网控制舆论的三个方法
  20. C语言函数的简单书写规范和调用

热门文章

  1. :架构优化在何时,方成为公司的推动力与核心竞争力
  2. MYSQL || 的BUG // MYSQL 不同库自增id的问题 //MySQL根据表注释查找对应的表 //hive -mysql 日期比较
  3. 【译】使用这些 CSS 属性选择器来提高前端开发效率!
  4. iOS初级开发笔记:Block回调,实现简单的绑定支付宝逻辑
  5. 程序员委托事件学习随笔
  6. 多图:多样化实现App多渠道统计
  7. [译]15个关于Chrome的开发必备小技巧
  8. 步入DevExpress的使用(VS)
  9. 如何設定 VS2008 讓 HTML 在格式化排版時不要破壞版面
  10. 小心!目录删除及重命名操作 ,一定丢失Session~~!