操作系统:日文版Windows XP
数据库:日文版ACCESS,里面存有中文、英文、日文数据,在OFFICE软件中可以正常显示而不出现乱码
开发语言:JAVA
开发平台:Eclipse 3.3,Tomcat 5.5
问题:使用JSP读取数据库中的数据,英文、日文可以正常显示,但是中文是乱码
备注:<%@ page language="java" import="java.sql.*" contentType="text/html; charset=UNICODE"
pageEncoding="UNICODE"%> 并且
<meta http-equiv="Content-Type" content="text/html; charset=UNICODE">已经尝试将UNICODE换成GBK或者GB2312或BIG5均未能解决乱码问题,望高人指点,不胜感激!
数据库:日文版ACCESS,里面存有中文、英文、日文数据,在OFFICE软件中可以正常显示而不出现乱码
开发语言:JAVA
开发平台:Eclipse 3.3,Tomcat 5.5
问题:使用JSP读取数据库中的数据,英文、日文可以正常显示,但是中文是乱码
备注:<%@ page language="java" import="java.sql.*" contentType="text/html; charset=UNICODE"
pageEncoding="UNICODE"%> 并且
<meta http-equiv="Content-Type" content="text/html; charset=UNICODE">已经尝试将UNICODE换成GBK或者GB2312或BIG5均未能解决乱码问题,望高人指点,不胜感激!
String str = "中文";
new String(str.getBytes("ISO8859-1"),"UTF-8");
补充下,确定你数据可里的中文在出数据库的时候不是乱的?
String str = "中文";
new String(str.getBytes("ISO8859-1"),"UTF-8");
补充下,确定你数据可里的中文在出数据库的时候不是乱的?
唉,还是不行啊!三个地方我全都换成UTF-8也不行,而且用new String转码也不成功,得到一堆的问号。
new String(str.getBytes("MS932"),"UTF-8"【或者UNICODE或者GBK等编码】) ;
结果都是乱码,愁死我了!
日语的系统真是烦人!
new String(str.getBytes("ISO8859-1"),"MS932");
试试?
页面上能够正常显示某些汉字,比如“星野宋”,这些汉字都是日语里也存在的汉字。
另外一些汉字,比如“蓝”字,就无法显示。
我觉得程序从ACCESS数据库中取数据时进行了默认的数据转码,可能将这些都转成了日语的编码,因为我的数据库连接驱动和连接字段分别为:
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:OnlineMusic";
用的都是JDBC到ODBC再到数据库,由于系统的默认语言是日语的,所以我怀疑可能数据在流经这些节点的时候被系统自动地给转码了。意思就是说,可能问题出在JDBC与ODBC上,可能它们会根据当前系统配置自动地做一些转码动作。小弟是个菜鸟,刚学JAVA不到一星期,对于这些驱动方面的知识甚是缺乏,望高人指点!
谁有编码方面的书籍啊?
我曾经做过IBM大型机方面的系统,在主机平台(DB2 for MainFrame,EDCBIC编码)与开放平台(JAVA程序,UNICODE编码)相互连接时,对汉字数据的处理就出现了乱码,最后无奈硬着头皮研究了一个星期,终于找到了EBCDIC与GBK之间的编码规律,最后手动编写算法完成了两种编码之间的转换。那个时候也是出于无奈,因为有关EBCDIC编码方面的资料太少了(IBM大型机方面的资料基本上都是只有IBM自个儿出,当时也找过IBM的技术指导,但是他们没能给出个合理的答案,可能是因为咱不是什么重要人物吧)。但是这次不一样,都是些常用的平台,资料应该很多,这方面的牛人也应该很多。
望高人指点迷津!
换SQL Server吧,把字段类型设置成nvarchar的,页面UTF-8,不带有乱码的
private Object convert2MS932(String _srcString) { StringBuilder _resultString = null; if (_srcString == null) {
return null;
} for (int i = 0; i < _srcString.length(); i++) { switch (_srcString.charAt(i)) { // U+301Cの判定
case '\u301C': if (_resultString == null) {
// 受け取った文字列からStringBuilderインスタンスを作成
_resultString = new StringBuilder(_srcString);
} // バイトコード変換(U+301CからU+FF5Eへ)
_resultString.setCharAt(i, '\uFF5E'); // ログ出力
if (log.isDebugEnabled()) {
log.debug("U+301Cが検出されU+FF5Eに変換しました");
} break; // それ以外の場合
default:
break; } } // 結果の返却
if (_resultString == null) {
// 該当文字が検出されなかった場合、文字列をそのまま返却
return _srcString;
} else {
// 該当文字が検出された場合、バイトコードを変更した文字列を返却
return _resultString.toString();
}
}用这个方法试试
不知道大侠有没有关于JDBC、ODBC方面的资料?能不能自己对所使用的驱动进行配置啊?