问题描述:
一套jsp应用程序,后台使用oracle,字符集是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,一切正常。后来客户更改了数据库的字符集(客户总是对的,不要指望改回来),为AMERICA_AMERICA.US7ASCII,结果jsp页面上所有从数据库读取的中文字符全部成了乱码(非数据库字符显示正常)。
尽管可以通过string.getBytes("iso-8859-1")转换字符串来消除乱码,可是现在jsp页面数量巨大,除了显示的时候要转换为汉字编码,在保存的时候还要转换为ISO88591的编码,所以这个方法不大可行。问题:
能不能通过Filter来统一处理编码转换(我自己用过滤器request.setCharacterEncoding("GBK")只能处理页面间传送的字符乱码问题,对数据库读取的无能为力)?或者在连接的时候有什么参数可以直接读取并转换?或者其他方法可以批量转换?越简单越好
一套jsp应用程序,后台使用oracle,字符集是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,一切正常。后来客户更改了数据库的字符集(客户总是对的,不要指望改回来),为AMERICA_AMERICA.US7ASCII,结果jsp页面上所有从数据库读取的中文字符全部成了乱码(非数据库字符显示正常)。
尽管可以通过string.getBytes("iso-8859-1")转换字符串来消除乱码,可是现在jsp页面数量巨大,除了显示的时候要转换为汉字编码,在保存的时候还要转换为ISO88591的编码,所以这个方法不大可行。问题:
能不能通过Filter来统一处理编码转换(我自己用过滤器request.setCharacterEncoding("GBK")只能处理页面间传送的字符乱码问题,对数据库读取的无能为力)?或者在连接的时候有什么参数可以直接读取并转换?或者其他方法可以批量转换?越简单越好
解决方案 »
- 跪求+命求linux cron job制作定时器,执行java程序
- 手机网站的问题?????
- 润乾报表的问题
- jsp 中 "0000-00-00" 从数据库中取出出现错误
- Ajax实现聊天
- 在表格中数据 根据单元格的宽度显示的问题
- xp sp2+sql server 2000 的jdbc连接问题(tomcat5+jdk1.4)
- 请教个问题做一个新闻发布系统 生成的静态HTML怎么实现分页
- 页面编码问题!但是不是中文乱码这个老问题!
- <jsp:getProperty name="userInfor" property="*"/> 出错!!(在线等待)
- 如何点击链接弹出新窗口同时刷新本页面????
- 小弟作毕业设计碰到的问题,自己觉得实在不知道该怎么解决,恳请高手指教。
* GB to Unicode
* @param strIn
* @return String
*/
public static String GBtoISO(String strIn)
{
byte[] b;
String strOut = null;
if (strIn == null || (strIn.trim()).equals("")) { return strIn; }
try
{
b = strIn.getBytes("GBK");
strOut = new String(b, "ISO8859_1");
}
catch (UnsupportedEncodingException e)
{
}
return strOut;
}
public static String myEncoding(String strIn){
//tomcat5
return GBtoISO(strIn);
//websphere4
//return strIn;
}
{
try
{
request.setCharacterEncoding("GB2312");
System.out.println("COPActionServlet+GB2312");
} catch(Exception e)
{
e.printStackTrace();
System.out.println("error in setCharacterEncoding! COPActionServlet+GB2312");
}
super.process(request, response);
}
}进出都搞搞上面的飞机!
最后在这个项目内部统一使用这个OracleEncordingPreparedStatement来操作SQL文,估计也算是一种办法了吧。
一是在执行sql前把GBK的转为ISO88591的,并在执行后把rs里面取的东西转回来。
二是自己封装两个类,一个是数据库操作的,里面执行sql的时候都自动把sql转码,一个是封装resulset的,里面的东西都自动做转码。两种方案都要挨个替换数据库操作部分的代码。没有更好的办法了。不过最好还是养成自己代码里面转码的习惯。这样,换数据库都没有问题。其实,你遍历一边代码,这样改的话,也花不了多少时间的,最多几个小时也就搞定了,而且以后都不用再改了。
我现在的做法是写一个转换的方法change(),并调用该方法把rs取出来的字段进行转换,查询结果可以相识中文
但我在页面做记录插入的时候,插入的数据在数据库显示还是乱码.我试着在插入数据前,把数据做一次转换(还是调用change()方法),数据入库后还是乱码,请问怎么解决呢?无论问题有没解决,到最后我都每位热心的朋友结分!谢谢各位
sql = new String(sql.getBytes("GBK"),"ISO-8859-1");
所以,如果你调的change()是用来把查询结果转成中文,那么,插入前还调这个是肯定不行的。