日期:2014-05-20  浏览次数:20787 次

字符集问题,崩溃了
oracle 数据库 字符集 us7ascii.
jsp 页面 编码方式 gbk ,从jsp 页面提取数据,转到action 的时候还是中文(过滤器设置为gbk的),插入数据库 就成了乱码。
我有转换 new String(xx.getBytes("gbk","iso-8859-1"));
为什么还是乱码?
快崩溃了,数据库字符集不能改。
哪位兄弟帮个忙,感激不尽。
真快崩溃了。急。

------解决方案--------------------
特别关注
------解决方案--------------------
连接时需要设置字符集编码
int oracleId = CharacterSet.ZHS16GBK_CHARSET;
CharacterSet dbCharset = CharacterSet.make(oracleId);
 
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
 
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@127.0.0.1:1521:db01",
"XX",
"XX");
 
Statement stmt = conn.createStatement();


试试是否可以。
------解决方案--------------------
数据库用什么字符,用什么方式插入数据,把操作数据的语句贴出来看看。
------解决方案--------------------
Java code
String s = new String(xx.getBytes("iso-8859-1"),"gbk");

------解决方案--------------------
数据库 服务器 页面
全设置 UTF-8
基本不用考虑 中文问题了
------解决方案--------------------
插入数据库前是不是乱码的?你要确定下是从那个地方开始乱的才行,各个地方都System.out.println下,先分析哪的问题,没乱的地方没必要贴出来也没必要改.至于你是否有写反编码还要具体问题具体分析才行,不能一概而论.
------解决方案--------------------
不转码直接插入数据库后就是乱码了
这里说的是直接到数据库中看,还是取出后看?

如果只是应用要看,你可以这样处理:
连接数据库的连接语句中指定字符集,或者全部以UTF-8插入,取出,应该可以的。


------解决方案--------------------
1 我先描述下我对你问题的理解插入数据库前也就是insert执行前不是乱码的
2 库现在的编码是us7ascii,是不可以修改的
3 us7ascii是单字节编码,而汉字是双字节的编码,应该是必然乱码的
4 插入的时候是乱码没关系,现在你测试下取出来的时候可不可以把乱码转换下,从数据库取的时候使用String s = new String(xx.getBytes( "iso-8859-1 "), "gbk ");这里的xx是你从数据库里面取出的字符串,如果显示正常算成功了.
5 如果第4步你成功了看第6步,如果第4步没成功,在向数据库插入前先转换为单字节编码new String(xx.getBytes( "gbk ", "iso-8859-1 "));
6 我实在想不出你为什么使用us7ascii编码,你可以在现有数据库的基础上进行修改的,以你现在的程序环境我建议你将库修改为zhs16GBK编码
7 倒库的方法
7.1 EXP前将注册表中...\ORACLE\HOME\NLS_LANG的键值改为ZHS16GBK
,再进入EXP ,用EXP时的用户IMP数据。
7.2直接导出后使用UltraEdit修改 dmp文件的前6个字节为03.03.54

zhs16GBK US7ascII
03.03.54 00.00.01
你目前导出的文件前6个字节应该为00.00.01
8 祝你好运!