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服务, 错误没有了。

 

 

 

 


 

  

 

 

 

 

你可能感兴趣的:(DB2 中文 C语言)