分享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的源文件了。
以上就是本文所述的全部内容了,希望大家能够喜欢。
请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!
上一篇: JSP自定义标签入门学习
下一篇: 儿童水果拼盘制作要注意什么