日期:2014-05-18  浏览次数:20909 次

JSP中sql2000数据库中文处理的问题
初学jsp,什么都不懂,我写了一个简单的处理数据库表的jsp程序,
可是从数据库中显示到页面上的中文变成了乱码,看了别人的解决方法好像也不行,各位高手帮我看看是怎么回事啊!!

<%@   page   contentType= "text/html;   charset=gb2312 "   language= "java "   import= "java.sql.* "   errorPage= " "   %>
<%request.setCharacterEncoding( "GB2312 ");%>
<%//@page   pageEncoding= "GB2312 "%>
<!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.01   Transitional//EN "   "http://www.w3.org/TR/html4/loose.dtd ">

<%
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver ").newInstance();
String   url= "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sdb ";
String   user= "sa ";
String   password= " ";
Connection   conn=   DriverManager.getConnection(url,user,password);
Statement   stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String   sql= "select   *   from   depts ";
//ResultSet   rs=sdb.executeQuery(sql);
ResultSet   rs=stmt.executeQuery(sql);
%>
<html>
<head>
<meta   http-equiv= "Content-Type "   content= "text/html;   charset=gb2312 ">
<!--   TemplateBeginEditable   name= "doctitle "   -->
<title> 无标题文档 </title>
<!--   TemplateEndEditable   -->
<!--   TemplateBeginEditable   name= "head "   -->
<!--   TemplateEndEditable   -->
</head>

<body>
<%String   id   =   " ";
String   name   =   " ";
while(rs.next())   {
id   =   new   String(rs.getString(1).getBytes( "ISO-8859-1 "), "gb2312 ");
name   =   new   String(rs.getString(2).getBytes( "ISO-8859-1 "), "gb2312 ");
//id=rs.getString(1);
//name=rs.getString(2);
%>
<p> 您的第一个字段内容为: <%=id%>
您的第二个字段内容为: <%=name%> </p>
<p>
    <%}%>
    <%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

------解决方案--------------------
id = new String(rs.getString(1).getBytes( "ISO-8859-1 "), "gb2312 ");
name = new String(rs.getString(2).getBytes( "ISO-8859-1 "), "gb2312 ");
这两句话为什么要转换编码?数据库中是ISO-8859-1编码?如果数据库中是这个编码的话应该不会有中文显示吧,我们开发中从数据库取数据,不转换编码。只有在从上一页面取得中文数据的时候才转换。因为tomcat默认是ISO-8859-1编码,所以它在传递数据的时候会将编码转换成ISO-8859-1。这种直接从数据库取数据应该没有转换的必要。
------解决方案--------------------
转换一下更为保险
------解决方案--------------------
看一下你的数据库中表字段的类型,具体我记不清了,但是我记得java开发要用可变长度的类型,即普通类型前面+n
------解决方案--------------------
加个过滤器

------解决方案--------------------
你现在这个表的字段类型是什么?
char改成nchar
varchar改成nvarchar
------解决方案--------------------
页面加上: <%@ page pageEncoding= "GBK "%>