Jsp之我遇到过的中文乱码问题和解决方法

1.第一个可能会出现中文乱码问题的是没有在JSP中指定页面显示的编码,就是在你写的jsp页面上没有指定编码规则,即:

<%@ page language="java" import="java.util.*" %>

(1).如果在MyEclipse中,你没写编码方式的话,将会弹出个对话框,要求你写上编码这个属性,在MyEclipse工具里创建的jsp页面首行默认是下面的代码:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

(2).如果jsp页面上有中文的话,保存下发现会不能完成,必须保存为utf-8格式,所以你刚开始创建此jsp页面时就直接把编码规则改成utf-8或GB2312,即:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<pre class="plain" name="code"><%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
 

2.第二个会出现中文乱码问题的是你使用了get方式提交表单,然后你提交的内容可能会出现乱码问题,在这里,我创建了一个ChineseTest Web Project,然后在WebRoot下创建了一个Myjsp1.jsp页面和一个result.jsp页面,接下来附上我所写的代码,来测试下使用get方式提交表单是否会出现中文乱码问题:

MyJsp1.jsp页面代码

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'Zhuce.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,</strong>keyword2<strong>,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   
     JSP学习中
   <form action="result.jsp" method="get" name="form">
    <br/>用户名:<input type="text" name="username" value="李四"/>
    <br/>密码:    <input type="password" name="password"/>
    <br/><input type="submit" value="注册" name="submit"/>
    	 <input type="reset" value="重置" name="reset"/>
    </form>
  </body>
</html>

result.jsp页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'result.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <%
    	request.setCharacterEncoding("utf-8");
     	String username=request.getParameter("username");
    	String password=request.getParameter("password");
    	out.println("用户名:"+username+"<BR>");
    	out.println("密码:"+password+"<BR>");
     %>
  </body>
</html>

然后运行MyJsp1.jsp页面,出现下面的界面:


出现此界面后,写上密码,点击注册按钮跳转到result.jsp页面,发现用户名出现了中文乱码:


解决办法为:将你提交的方式改为post,get提交方式会泄露一些内容并且出现中文乱码问题,所以建议大家提交表单时都用post方式。

改为post后就可以显示正常的中文了。

3.第三个会导致中文乱码问题的是从表单获取内容时,使用request.getParameter(“”)的方法,当表单中出现中文数据的时候就会出现乱码。

(1).解决方法一:request.setCharacterEncoding("utf-8"); 利用内置对象request来设置字符编码方式为utf-8;

此时,你运行jsp页面,你所通过resquest.getParameter(“”)方法获取的中文数据全部都能正常显示。

注:如果你使用的是request.setCharacterEncoding("GB2312"); 方法来设置字符编码的话,运行上面的MyJsp1.jsp页面,会出现像下图的中文乱码问题:

但是有可能你不会出现该中文乱码问题,我用这种方法试过很多次都会出现中文乱码问题,最好使用request.setCharacterEncoding("utf-8");来设置;

(2).解决方法二:可以在你获取表单内容后,用下面的代码来设置字符编码并直接输出获取到的内容:

  <%
     	String username=request.getParameter("username");
    	String password=request.getParameter("password");
    	out.println("用户名:"+new String(username.getBytes("ISO-8859-1"),"utf-8")+"<BR>");
    	out.println("密码:"+new String(password.getBytes("ISO-8859-1"),"utf-8")+"<BR>");
     %>


或者能使用下面的代码:

  <%
     	String username=request.getParameter("username");
    	String password=request.getParameter("password");
    	String name=new String(username.getBytes("ISO-8859-1"),"utf-8");
    	String word=new String(password.getBytes("ISO-8859-1"),"utf-8");
    	out.println("用户名:"+name+"<BR>");
    	out.println("密码:"+word+"<BR>");
     %>

其实都是一样的,只不过前者是后者的缩写,这样都不会出现中文乱码问题。

注:如果把result.jsp的核心代码改成下面的话,又会出现中文乱码:

    <%
     	String username=request.getParameter("username");
    	String password=request.getParameter("password");
    	String name=new String(username.getBytes("ISO-8859-1"),"GB2312");
    	String word=new String(password.getBytes("ISO-8859-1"),"GB2312");
    	out.println("用户名:"+name+"<BR>");
    	out.println("密码:"+word+"<BR>");
     %>

所以大家最好字符编码设置为utf-8。

4.接下来说一下还有一种出现中文乱码的问题,就是你在创建jsp页面时添加并修改一些代码,即在jsp的前两行变成这样的代码:

如我在MyJsp1.jsp和result.jsp中都把前两行改成这样:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="text/html; charset=GB2312"%>

显然没有语法错误,看起来应该是可以的,但是一运行MyJsp1.jsp页面发现:


以上页面出现了中文乱码问题。

接下来我在那个用户名文本行里输入一个中文,再输入密码,点击注册按钮看提交到result.jsp里是否也会出现中文乱码问题:

点击之后的页面如下:

既然没问题,知道什么原因么,因为我们重新输入用户文本行的一个中文林业,在result.jsp里面获取文本行的内容并设置了字符编码为utf-8,所以不会出现乱码,但是不用我们获取的文本内容不会出现乱码,但是我们没改变表单内文本行里的内容,出现的就是????乱码了,即:

点击红色箭头之后跳转到result.jsp页面:

注:所以再创建JSP页面时不要后面那句<%@ page contentType="text/html; charset=GB2312"%>,只要<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>即可。

 

5.总结下,遇到中文乱码问题时,最好把字符编码规则设置为utf-8,因为这是国际通用的编码方式,但是为什么中国通用的编码方式GB2312就不能解决乱码问题呢,虽然我在MyEclipse下试验的结果是设置GB2312的会出现中文乱码问题,但是有些计算机使用GB2312不会出现乱码问题,这个真的很奇怪,有可能是服务器等等其它的原因,在这里,建议大家使用utf-8的编码方式,如果设置成这样都有错误,那试一下GB2312的编码方式,也有可能会解决,就这样了。

6.以上内容是我学习得来的,仅供学习参考所用,如有错误,请评论,写得不好,请见谅,谢谢!

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值