tubaobaoya3 发表于 2016-11-17 00:09:01

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服务, 错误没有了。
  
 
页: [1]
查看完整版本: DB2中文字段在C程序中的乱码问题