当前位置: 代码网 > it编程>编程语言>Java > JSP出现中文乱码问题解决方法详解

JSP出现中文乱码问题解决方法详解

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

在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的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='中文'" rel="external nofollow" >请点击这个链接</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也好,浏览器也罢)的编码没有和编程人员的编码进行统一,(就像你和一个不懂中文的人用中文交流他当然不懂了)那么解决这个问题只需要将编程人员想要的编码告诉程序就可以了,以上解决乱码问题的种种方法都可以说是一种声明编码的过程,也就是说乱码问题终极解决方案就是:转码。这里的转码要么是编程人员手动转,要么就是声明一下让程序去转,换句话说就是:和不懂中文的交流,要么让他学中文,要么你就去学习他的语言。

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

到此这篇关于jsp出现中文乱码问题解决方法详解的文章就介绍到这了,更多相关jsp中文乱码问题解决方法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • jsp网页实现贪吃蛇小游戏

    jsp网页实现贪吃蛇小游戏

    本文实例为大家分享了jsp网页实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下一、主要思路(1)第一步实现地图。(2)第二步实现蛇身。(3)第三步实现食物。... [阅读全文]
  • SSM框架JSP使用Layui实现layer弹出层效果

    SSM框架JSP使用Layui实现layer弹出层效果

    最近做的系统里,使用layui当作前端的框架,就是用了layui自带的layer弹出层,效果图如下。首先,导入layui需要的css,js文件,这个就不需要多说... [阅读全文]
  • jsp 实现的简易mvc模式示例

    jsp 实现的简易mvc模式示例

    本文实例讲述了jsp 实现的简易mvc模式。分享给大家供大家参考,具体如下:jsp : java servlet pagemvc全名是model view co... [阅读全文]
  • jsp filter 过滤器功能与简单用法示例

    jsp filter 过滤器功能与简单用法示例

    本文实例讲述了jsp filter 过滤器功能与简单用法。分享给大家供大家参考,具体如下:过滤器的作用是什么?过滤器可以动态地拦截请求和响应,以变换或使... [阅读全文]
  • JSP实现分页效果

    本文实例为大家分享了jsp实现分页的具体代码,供大家参考,具体内容如下咱们在浏览网页的时候,当一个页面的数据不足以展示完全所有的内容,一般都涉及到分页,下一页的功能该怎么实现呢?首…

    2024年05月18日 编程语言
  • JSP+Servlet实现文件上传到服务器功能

    JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了jsp+servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下项目目录结构大致如下:正如我在上图红线画的三个东西:dao... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com