怎么解决JSP页面上的乱码?

怎么解决JSP页面上的乱码?,第1张

刚开始学习jsp的程序员都会遇到这样一个问题,就是网页上的中文无法显示.总结了以下几条方法。 \x0d\x0a1、在jsp页中加入一条语句: \x0d\x0a中文显示就正常了。 \x0d\x0a\x0d\x0a2、对于从网页中的文本框通过String parameter = request.getParameter(“parameter”)方式获得的字符串,均是8859_1的编码, \x0d\x0a如果想把它显示在网页上就必须得用parameter = new String(parameter.getBytes(“8859_1”),”gb2312”)进行转换,windows和linux这两种系统都是一样的。 \x0d\x0a有一个简单方法,就是在 getParameter() 方法获取参数之前,使用request.setCharacterEncoding("GB2312"),将提交的信息转化为 GB2312 编码。 \x0d\x0a\x0d\x0a3、但是对于将数据写入数据库的问题,采取的方式就不同了: \x0d\x0awindows下,必须要采用该字符串转换再插入数据库,而linux下就不需要,而是直接把8859_1编码的字符插入。 \x0d\x0a如果从数据库中读出的数据,对于windows因为在插入时已经做了转换,所以读出时已经是gb2312的,当把它显示在网页上时,不需要做编码转换,而 linux上的mysql中的数据是8859_1的所以要做编码的转换。 \x0d\x0a\x0d\x0a4、 如果你给某个字符串变量赋予一个中文字符串的值,那么在你取出他时,在网页上的显示是不需要做字符转换的, \x0d\x0a但是如果你要在linux下做字符的比较,则还需要把字符做parameter = new String(parameter.getBytes(“gb2312”),”8859_1”)的转换。 \x0d\x0a\x0d\x0a5、长江电力网站解决中文问题的方法是: \x0d\x0a1)在catalina.sh文件中的相关位置添加下面一行 \x0d\x0a-Dfile.encoding=GBK \ \x0d\x0a2)在每个jsp文件的最前面添加下面两行 \x0d\x0a \x0d\x0a

1、JSP页面出现的中英文乱码

我们的PageCharset.jsp页面代码如下所示:

[html] view plain copy

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

<html>

<head>

<title>中文显示示例</title>

</head>

<body>

中文显示的示例。

<%

out.print("这里是用jsp输出的中文")

%>

</body>

</html>

当我们在保存我们的文件的时候会出现下面的提示:

整因为在我们的MyEclipse中默认的编码为ISO-8859-1,而ISO-8859-1不支持中文的编码,所以jsp页面代码如果出现中文就不能保存了。对于这样的错误,我们只要在页面上加上支持中文的编码格式就可以了,在jsp页面中加上pageEncoding=“gb2132” 支持中页面的编码格式就可以了。这样我们就能正常保存我们的jsp源文件了。

2、URL传递参数中文乱码

[html] view plain copy

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

<html>

<head>

<title>URL传递参数中英文处理示例</title>

</head>

<%

String param = request.getParameter("param")

%>

<body>

<a href="URLCharset.jsp?param='中文'">请单击这个链接</a>

您提交的这个参数为:<%=param %>

</body>

</html>

启动tomcat运行结果出现url传递的中文乱码:

这里我们需要配置tomcat服务器文件,才能解决这个问题。具体方法是,在tomcat的conf目录下找到server.xml配置文件,找到如下代码

[html] view plain copy

<span style="font-size:18px">  <Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"  /></span>

在后面添加上编码方式,URIEncoding="gb2312" 重新启动tomcat问题就解决了。

3、表单提交中问乱码

对于表单中提交的数据,可以用request.getPraramter("")方法来获取,但是当表单中出现中文数据的时候就会出现乱码。

我们的提交表单的页面,FormCharset.jsp页面如下:

[html] view plain copy

<%@ page language="java" contentType="text/html charset=GB18030"

pageEncoding="GB18030"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html charset=GB18030">

<title>Form中文处理示例</title>

</head>

<body>

下面是表单内容:

<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>

</body>

</html>

我们的AcceptFormCharset.jsp页面:

[html] view plain copy

<%@ page language="java" contentType="text/html charset=GB18030"

pageEncoding="GB18030"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html charset=GB18030">

<title>Form中文处理示例</title>

</head>

<body>

下面是表单提交以后request取到的表单的数据:<br>

<%

out.println("表单输入的userName值为:" + request.getParameter("userName") +"<br>")

out.println("表单输入的pasword值为:" +request.getParameter("password") + "<br>")

%>

</body>

</html>

提交表单:

结果如下:

我们看到我们在表单中的中文数据出现了乱码,为什么楚翔这种情况呢?是因为我们的tomcat中,对于以post方式提交的表单编码格式默认为ISO-8859-1的编码格式,而这种编码格式是不能编码中文的,所以就会出现乱码的现象了。对于这种情况,我们可以对表单中的数据进行处理,在取得表单参数的时候设置编码方式,我们更改了我们的接受表单数据的页面如下所示:

[html] view plain copy

<%

String userName = request.getParameter("userName")

String passWord = request.getParameter("password")

out.println("表单输入的userName值为:" +  new String(userName.getBytes("ISO-8859-1"),"gb2312")+"<br>")

out.println("表单输入的pasword值为:" + new String(passWord.getBytes("ISO-8859-1"),"gb2312")+"<br>")

%>

这样就得到我们想要的效果啦:

4、数据库 *** 作中文乱码

我们在建立数据库的时候,最好是能选择支持中文编码格式,最好是能和jsp页面编码格式保持一致,这样就尽可能的减少数据库 *** 作中文乱码的问题,最开始的连接数据库的时候,编写好数据库的编码策略,也就是使用这种形式的URL:jdbc:Oracle:thin:@localhost:1521:TESTuserEnicode=truecharacterEncoding=gb2312这样我们选择的数据库的编码和我们的jsp编码就一致了。

写入到数据库的时候,数据库中中文乱码:

但是如果我们在最开始的时候没有对数据库的编码进行设置,并且我们的数据库中已经有大量的数据的话,我们再向数据库中写入中文数据,数据库中的中文显示为乱码。在写入数据的时候出现乱码,是因为我们在处理表单的时候没有对字符的编码设置,对于这种情况,我们在jsp中或servlet中加入:

rquest.setCharacterEncoding("gb2312")//处理表单请求的时候设置编码。

这样再看我们的数据库,插入的中文字段就不会乱码了。

从数据库中读出中文乱码:

数据库中的中文出现乱码,就是在读取数据库的时候进行转码,这样显示就不会乱码了。我们整理这样的一个转码函数:

public String encoder(String str) throws UnsupportedEncodingException

{

String result = new String(str.getBytes("ISO-ISO-8859-1)"),"gb2312")

}

5 在myeclipse开发工具中打开中文显示乱码

在myeclipse中默认的编码方式为ISO-8859-1,所以打开有其他编译器编码的jsp页面就会出现乱码,是因为两个编译器保存源文件编码格式不同,在UltralEdit可以支持中文,但是在Eclipse对jsp文件的保存方式为ISO-8895-1,这种编码不支持中文,所以就会出现乱码。

对于这种情况,我们可以更改myeclipse默认的编码方案,myeclipse->Window->Preferences->General->Content types->Test->JSP

这样问题就解决啦!

6 Filter批量设置编码格式

我们对于每一个jsp或servlet我们都要设置编码格式,效率有些低,我们的servlet的Filter解决了我们的问题。在前篇写过Filter的解决中文乱码问题的文章,在这里就不赘述了。http://blog.csdn.NET/lovesummerforever/article/details/9924413

需要强调的一点,开始使用Java model1模型的时候,我们在web.xml中配置只需要配置好jsp页面就可以了,在model2模型中我们使用servlet作为控制器,我们就需要在Filter的配置文件web.xml中配置好servlet的设置,对所有的servlet处理的表单编码进行设置。

[html] view plain copy

<filter>

<filter-name>CharsetEncodingFilter</filter-name>

<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>GBK</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharsetEncodingFilter</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>CharsetEncodingFilter</filter-name>

<url-pattern>/servlet/*</url-pattern>

</filter-mapping>

首先把你获取的页面的数据用DB的编码方式重新编码一下再存入DB.

如String tstna=request.getParameter("shijuanming")

改成String tstna=request.getParameter("shijuanming")

tstna = new String(tstna.getBytes("ISO-8859-1", "GB2312"))

后面的一个编码方式,如果DB是GB2312,那就是这个,如果不是,改成DB相应的编码方式就行了.

当然,把mysql 和 jsp上编码格式设置一致即可, 一般默认mysql的编码格式是UTF-8, 建议在jsp中也设置为UTF-8, 如果你不想这么做的话要改数据库格式, 也就是说你所有建立的表都要重新建立成GBK编码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6073198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-13
下一篇 2023-03-13

发表评论

登录后才能评论

评论列表(0条)

保存