DB2中文字段在C程序中的乱码问题

在C语言中用嵌入式SQL访问DB2数据库时,中文字段显示出现错误,具体情况为空白,通过打印字符的16进制码,发现是操作系统不支持中文引起的。

开发环境为AIX6.1,  DB2 V9.5, 用标准C开发应用程序。

查看语言设置,如下:

#locale

LANG=en_US
LC_COLLATE="en_US"
LC_CTYPE="en_US"
LC_MONETARY="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_MESSAGES="en_US"
LC_ALL=

系统目前为 英文,

查看系统支持的语言包如下:

#locale -a

C
POSIX
en_US.8859-15
en_US.ISO8859-1
en_US

 显然,目前的系统没有安装 中文语言包,上网搜了一下,由于语言包为系统自带,需要AIX的安装光盘,找到AIX光盘,通过远程终端,上传如下文件包到服务器:

bos.iconv         

bos.loc.com.CN    

bos.loc.com.utf   

bos.loc.iso.zh    

bos.loc.utf.ZH_CN

1.  安装语言包,SMITTY INSTALLP,  进入上传文件包的位置,输入如下安装命令

#smitty installp

下一步, 选择 Install and Update from ALL Available Software,  回车,

再下一步, 在 * INPUT device / directory for software      []       中输入  " . "  , 表示当前路径,

接着在 * SOFTWARE to install                                []    的地方 按F4, 可以选择要安装的软件包,

注意: 安装的时候需要 root 身份登录, 启用有一个包有依赖,如果安装失败,需要先安装完其他的才可以继续安装。

安装完成,F3 退出SMITTY,

#locale -a

C
POSIX
ZH_CN.UTF-8
ZH_CN
Zh_CN.GB18030
Zh_CN
Zh_TW.big5
Zh_TW
en_US.8859-15
en_US.ISO8859-1
en_US
zh_CN.IBM-eucCN
zh_CN
zh_TW.IBM-eucTW
zh_TW

现在系统可以支持中文了, 有 UTF-8, BG18030 等,

2.  设置系统语言环境,   在 .profile  文件中加入环境变量(bash为 .bash_profile)

       export LANG=ZH_CN.UTF-8     或者   export LANG=ZH_CN      #支持utf-8

       export LANG=Zh_CN.GB18030     或者   export LANG=Zh_CN      #支持 GB18030

       注意设置的 ZH_CN  与  Zh_CN 的区别,  (h 大小写问题)

    

        重新登录后,

        #locale

           

            LANG=ZH_CN.UTF-8
            LC_COLLATE="ZH_CN.UTF-8"
            LC_CTYPE="ZH_CN.UTF-8"
            LC_MONETARY="ZH_CN.UTF-8"
            LC_NUMERIC="ZH_CN.UTF-8"
            LC_TIME="ZH_CN.UTF-8"
            LC_MESSAGES="ZH_CN.UTF-8"
            LC_ALL=

3.   编译程序,运行.  发现显示还是不正确, 不是空白了,但是是乱码

        查看登录终端的设置, 我用的是Secure-CRT,   发现在  选项 / 会话选项  / 外观 / 字符编码 为 default, 

        选择UTF-8 , 保存退出。

        再次登录,运行程序, O.K.  搞定了。 

4.   TUXODO 对中文的支持,由于涉及到TUXEDO, 同时在重启 TUXEDO 服务时出现如下错误,

NLS:4: Cannot open message catalog CMDTUX_CAT, set 1, num 748; check TUXDIR=/home/tuxedo/tuxedo8.1, LANG=ZH_CN.UTF-8

     在TUXEDO 的主目录下,有一个  locale 目录, 进入后建立连接如下

  

     # ln  -s  C    ZH_CN.UTF-8

     

     # ls -l 

         drwxr-xr-x    2 tuxedo   tuxedo         4096 12月15 2010    C
         lrwxrwxrwx    1 tuxedo   tuxedo            1  1月09 17时23 ZH_CN.UTF-8 -> C
         lrwxrwxrwx    1 tuxedo   300               1 12月08 14时02 en_US -> C

重新启动TUXEDO服务, 错误没有了。


 

  

猜你喜欢

转载自daizh868.iteye.com/blog/1338880