数据库乱码问题(50分)(50分)

  • 主题发起人 主题发起人 wenhong
  • 开始时间 开始时间
W

wenhong

Unregistered / Unconfirmed
GUEST, unregistred user!
在JSP中从SQLSERVER2000中读取数据,读处数据后发现只要是汉字的都出现乱码问题,
不知道该怎样解决,
我在开始时加了下面的句子也没有效果。
<%@ page contentType="text/html;
charset=gb2312"%>
 
在线等待
 
每个面页都加啊,还有就是你数据库的原始数据是什么啊
 
这个问题你只要搜索以下旧贴就可解决
 
charset=gb2312 可能问题就在此?
情况一:数据库后台非gb2312字符集
情况二:客户端非gb2312字符集
没用 过SQLSERVER我想大概是这种情况,回答的不对,就当帮你踢一下,呵呵
 
楼上的应该比较有道理,你可以试试看GBK字符集啊。
 
从 URL 或者 html form 中传递的是中文,就需要如此转换一下:
String tt = request.getParameter("test");
String t1 = "";
if (tt != null) {
t1 = new String(tt.getBytes("ISO8859_1"));
}
t1里面就是正确的中文
 
不过建议不要这样使用,getBytes()反正就是不好。
 
哥们试试这个,我测试过,没问题:
在 getParameter() 方法获取参数之前,使用request.setCharacterEncoding("GB2312");
 
我可以告诉你,我也碰到过,在浏览器:查看—————编码-----简体中文
就可以了
 
这个问题我遇到过。不过我的数据库是静态的,存入数据库中的数据要以unicode编码存储。
在网页显示时才不会是乱码。
原因可能是存入数据库中的数据系统会自动给他编码,然后读出来的时候又自动解码,但解码时将一个汉字当成了两个字符来解。
在ASP中不会出现这种问题,JavaScript编的脚本就会出现这种问题。
解决的办法是将存入数据库中的数据先用escape()函数来编码。
读出后再用unescape()函数解码,如果解一次还是乱码。可以再解一次。
下面是一个读取cookie的例程。原理相同,可以借鉴一下
http://peakcao.nease.net/dhtml/getname.htm
 
<%request.setCharacterEncoding("gb2312");%>
肯定解决!!记得给分啊!肯定解决!!记得给分啊!肯定解决!!记得给分啊!
肯定解决!!记得给分啊!肯定解决!!记得给分啊!肯定解决!!记得给分啊!
肯定解决!!记得给分啊!肯定解决!!记得给分啊!肯定解决!!记得给分啊!
 
我认为汉字必须使用Unicode编码才不会出现问题。我用在网页上的从数据库中读出的汉字都是Unicode编码
 
我有同样的经历,我以前将WEB APPLICATION 从 WINDOWS 迁移到 LINUX 又从 LINUX 迁移到 WINDOWS ,乱码不断,我想到应该是JDBC提供的 ResultSet 类的getString()方法的问题,最终我解决了,永久解决了!
备注:我的系统是 JSP + Mysql,(不知道有没有人遇到相同的问题),我没有用过MsSQL JDBC所以不能提供最终的答案,但是我想应该是一个很好的借鉴。
 
通常是因为数据库的编码和web服务器以及jsp程序的编码设置不同造成的,这也是现在我在定义项目之前最注意的事情.
如果现在数据库服务器,web服务器都不能改变,则只能在读取数据的时候作相应的编码变换解决了.
提供几个编码的的方式,在不同的环境下应该使用不用的,我这里给你全列出来了.
我这个方式是写文件时使用的,将前面的pw.println换成相应的操作就行了.
pw.println("1"+str);
pw.println("2"+str.getBytes());
pw.println("3"+str.getBytes("GB2312"));
pw.println("4"+str.getBytes("ISO8859_1"));
pw.println("5"+new String(str.getBytes()));
pw.println("6"+new String(str.getBytes(),"GB2312"));
pw.println("7"+new String(str.getBytes(),"ISO8859_1"));
pw.println("8"+new String(str.getBytes(),"ISO8859_1"));
pw.println("9"+new String(str.getBytes("GB2312")));
pw.println("10"+new String(str.getBytes("GB2312"),"GB2312"));
pw.println("11"+new String(str.getBytes("GB2312"),"ISO8859_1"));
pw.println("12"+new String(str.getBytes("ISO8859_1")));
pw.println("13"+new String(str.getBytes("ISO8859_1"),"GB2312"));
pw.println("14"+new String(str.getBytes("ISO8859_1"),"ISO8859_1"));
 
如果是获得的string
temp=new String(temp.getBytes("iso-8859-1"),"gb2312");
如果显示时<%@ page contentType="text/html;
charset=gb2312"%>
 

代楼主结束帖子。
 
后退
顶部