Chinaunix

标题: 老调的话题,求教dbaccess乱码的问题 [打印本页]

作者: yxr2008    时间: 2008-10-23 17:16
标题: 老调的话题,求教dbaccess乱码的问题
我安装的Informix 9.4 on Redhat AS 4,环境变量如下:
DB_LOCALE=zh_CN.GB18030-2000; export DB_LOCALE
CLIENT_LOCALE=zh_CN.GB18030-2000; export CLIENT_LOCALE
SERVER_LOCALE=zh_CN.GB18030-2000; export SERVER_LOCALE
DBLANG=zh_CN.GB18030-2000; export DBLANG

客户端连接通过DBRichTool,JDBC,Server Studio连接都可以正常添加、修改使用中文,包括“劼赟”这样的GBK特殊汉字。

但是在服务器上面使用dbaccess时,当时插入的数据【id='x'】可以显示,但是通过DBRichTool,JDBC,Server Studio就是乱码
> select * from t_test;

id     1
title  2????úS?úS

id     2
title  2?

id     3
title  hello2???

id     cd
title  2??aaaaaaaaaaa

id     x
title  测试中文

5 row(s) retrieved.

>
经过测试,使用dbaccess插入的数据编码为UTF-8,在java程序中通过下面转码就可以正常显示了。
String newtext=new String(text.getBytes("GBK"),"utf-8");

在redhat中,LANG参数的确也是zh_CN.UTF-8,为此,我修改了/etc/sysconfig/i18n中的参数
LANG="zh_CN.gbk"
SUPPORTED="zh_CN.gbk:zh_CN:zh:zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

重启机器之后进入LANG=zh_CN.gbk,这样service --status-all都是乱码了,不管了,启动informix

进入dbaccess后测试结果依然是这样,求教大侠,俺该怎么办才能让dbaccess不使用这个UTF-8呢?
作者: hakajawa    时间: 2008-10-23 21:05
在系统中加入中文的设定呢?
、/etc/profile
LANG=zh_CN.GB18030-2000; export LANG
LC_CTYPE=zh_CN.GB18030-2000; export LC_CTYPE
LC_ALL=zh_CN.GB18030-2000; export LC_ALL
作者: yxr2008    时间: 2008-10-24 09:41
原帖由 hakajawa 于 2008-10-23 21:05 发表
在系统中加入中文的设定呢?
、/etc/profile
LANG=zh_CN.GB18030-2000; export LANG
LC_CTYPE=zh_CN.GB18030-2000; export LC_CTYPE
LC_ALL=zh_CN.GB18030-2000; export LC_ALL



这些是操作系统的设置,操作系统本身不是zh_CN.GB18030-2000,执行locale -a可以看到。
通过redhat的release说明提到,redhat AS 4本身核心采用的是UTF-8编码,所以如果设置LANG,LC_CTYPE,LC_ALL为非UTF-8的字符集,运行ls -l都会看到乱码,
redhat还提示文本文件编码也要改成UTF-8才能通过more这样正常查看。
所以使用dbexport导出的文件直接查看乱码,通过iconv -c -f GBK -t UTF-8 -o to.txt src.txt这样转码就可以正常浏览了。

但是有没有办法使得dbaccess可以根据用户环境变量的LOCALE设置处理不同的编码呢?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2