rss· 投稿· 设为首页· 加入收藏· 繁體版

jsp乱码问题

一、JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码:<html><head><title>JSP的中文处理

</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%

out.print("JSP的中文处理");%></body></html>对不同的WEB服务器和不同的JDK版本,处理结果就不一样。

原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。解决办法:在JSP页面中指

定编码方式(gb2312),即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就

可以消除乱码了。完整页面如下:<%@ page contentType="text/html; charset=gb2312"%

><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html;

charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>二、表单提交中文时出现

乱码下面是一个提交页面(submit.jsp),代码如下:<html><head><title>JSP的中文处理</title><meta

http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><form name="form1"

method="post" action="process.jsp"><div align="center"><input type="text" name="name"><input

type="submit" name="Submit" value="Submit"></div></form></body></html>下面是处理页面

(process.jsp)代码:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中

文处理</title><meta http-equiv="Content-Type" content="text/html;

charset=gb2312"></head><body><%=request.getParameter("name")%></body></html>如果submit.jsp提交英

文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而

UTF- 8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过

request.seCharacterEncoding ("gb2312")对请求进行统一编码,就实现了中文的正常显示。修改后的

process.jsp代码如下:<%@ page contentType="text/html; charset=gb2312"%><%

request.seCharacterEncoding("gb2312");%><html><head><title>JSP的中文处理</title><meta http-

equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%=request.getParameter

("name")%></body></html>三、数据库连接出现乱码只要涉及中文的地方全部是乱码,解决办法:在数据库的

数据库URL中加上useUnicode=true&characterEncoding=GBK 就OK了。四、数据库的显示乱码在mysql4.1.0

中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,

对于text类型就要用一个编码转换类来处理,实现如下:public class Convert {/** 把ISO-8859-1码转换成

GB2312*/public static String ISOtoGB(String iso){String gb;try{if(iso.equals("") || iso ==

null){return "";}else{iso = iso.trim();gb = new String(iso.getBytes("ISO-8859-

1"),"GB2312");return gb;}}catch(Exception e){System.err.print("编码转换错误:"+e.getMessage

());return "";}}}把它编译成class,就可以调用Convert类的静态方法ISOtoGB()来转换编码。总结:1.  在

jsp中<%@ page contentType="text/html; charset=A" %>如果指定了,那么在改jsp中所有构造的String(不

是引用),如果]有指定编码,那么这些String的编码是A的。    从request的得到的String如果]有指定

request的编码的话,他是iso-8859-1的    从别的地方得到的String是使用原沓跏嫉谋嗦氲模热绱邮

库得到String,如果数据库的编码是B,那么该String的编码是B而不是A的,也不是系统默认的。    此时,如

果要输出的String的编码不是A,那么,很可能显示乱码的,所以首先要将String正_转化为编码A的String,然

后输出。2.  在jsp中<%@ page contentType="text/html; charset=A" %>]有指定,那么相当于指定了<%

@page contentType="text/html; charset=ISO-8859-1" %>3. Servelte中如果执行了像

response.setContentType("text/html;charset=A");h明将response的字符输出流编码设置为A,所有要输出

的String的编码要转化为A的,否t会得到乱码的。    Servelet中从request得到的String的编码和jsp中一

样的,但是在servlet java文件中构造的String是使用的系统默认的编码的。在servelt中从外部得到的

String 是使用原来的编码的,比如从编码为B的数据库得到的数据是编码为B的,不是A,也不是系统默认的编码


JSP中文乱码问题解决方法小结  在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我

在软件开发中遇到的乱码问题以及解决方法。1、JSP页面乱码  这种乱码的原因是应为没有在页面里指定使

用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,2、数据库乱码  这种

乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:  在数据库连接字符串

中加入编码字符集  String Url="jdbc:mysql://localhost/digitgulf?

user=root&password=root&useUnicode=true&characterEncoding=GB2312";  并在页面中使用如下代码: 

 response.setContentType("text/html;charset=gb2312");  request.setCharacterEncoding

("gb2312");3、中文作为参数传递乱码  当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码

情况,解决方法如下:  在参数传递时对参数编码,比如  RearshRes.jsp?keywords=" +

java.net.URLEncoder.encode(keywords)  然后在接收参数页面使用如下语句接收  keywords=new

String(request.getParameter("keywords").getBytes("8859_1"));4、JSP页面乱码加这句  <%@ page

contentType="text/html; charset=gb2312" language="java" import="java.sql.*"errorPage="err.jsp"

%>JSP/JDBC MySQL乱码问题
JSP的request 默认为ISO8859_1,所以在处理中文的时候,要显示中文的话,必须转成GBK的,如下String

str=new String(request.getParameter("name").getBytes("ISO8859-1"),"GBK");out.println(str);这样就

可以显示中文了MYSQL操作时的中文问题:这个要看MySQL的默认编码了,一般不调整的话为latin1其实和

ISO8859_1一样,所以操作的时候要处理和他一致,不然就会乱码的1.插入中文:String sql2="INSERT INTO

test (name) VALUES('"+request.getParameter("name")+"')";stmt.executeUpdate(sql2);不用编码就可以

插入了2.显示插入的中文:因为存入的是latin,所以显示的时候就要GBK一下String x=new String

((rs.getString("title")).getBytes("ISO8859_1"),"GBK");out.println(x);3.设定存储编码:当然在MySQL

为latin1编码时,也可以存的时候用GBK了Connection con=DriverManager.getConnection

("jdbc:mysql://localhost:3306/jsp?useUnicode=true&characterEncoding=GBK","root","");str1="中

文";String sql2="INSERT INTO test (name) VALUES('"+str1+"')";这样也可以很成功的插入了JSP/Servlet

中的汉字编码问题网上就 JSP/Servlet 中 DBCS 字符编码问题有许多优秀的文章和讨论,本文对它们作一些

整理,并结合 IBM WebSphere Application Server 3.5(WAS)的解决方法作一些说明,希望它不是多余的。

顶一下
(0)
踩一下
(0)