aix c语言 构造函数,AIX语言包及编码转换

AIX上语言包及编码转换

查看已经安装的语言包:

# locale -a

C

POSIX

ZH_CN

ZH_CN.UTF-8

en_US

en_US.8859-15

en_US.ISO8859-1

zh_CN

zh_CN.IBM-eucCN

查看当前的设置:

# locale

LANG=zh_CN

LC_COLLATE= "zh_CN "

LC_CTYPE= "zh_CN "

LC_MONETARY= "zh_CN "

LC_NUMERIC= "zh_CN "

LC_TIME= "zh_CN "

LC_MESSAGES=zh_CN

LC_ALL=zh_CN

修改设置:

# export LC_ALL=ZH_CN.UTF-8

查看修改后的设置:

# locale

LANG=zh_CN

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=ZH_CN.UTF-8

export LC_ALL=ZH_CN.UTF-8

export LANG=ZH_CN.UTF-8

结果是一样的。因为LC_ALL是优先级最高的,改不改LANG没有什么影响

AIX上安装语言包

1.将AIX系统盘的第一张光盘放入光驱;

2.运行命令:

smitty

--> System Environments

--> Manage Languange Environment

--> Add Addinational Languange Environments

在随后显示的菜单中将光标分别移到以下字段,按F4进行选择(选择.... (zh_CN)相应语言):

CULTURAL Convention to Install

LANGUAGE translation to install

在光驱中放入介质,回车就可以了。

LANGUAGE translation to install

GB18030 S-Chinese (GB18030) [Zh_CN]

UTF-8 Chinese (Simplified UTF) [ZH_CN]

编码转换例程:

#include

#include

#include

#include

using namespace std;

#define MAXBUFLEN 512

//代码转换操作类

class CodeConverter {

private:

iconv_t cd;

public:

//构造函数

CodeConverter(const char *from_charset,const char *to_charset) {

cd = iconv_open(to_charset,from_charset);

}

//析构函数

~CodeConverter() {

iconv_close(cd);

}

//缓冲区数据转换输出

int Convert(char *inbuf,int inlen,char *outbuf,int outlen) {

int lri_ret;

char **pin = &inbuf;

char **pout = &outbuf;

memset(outbuf,0,outlen);

return iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen);

}

//文件转换输出

int ConvertFile(char *infile, char *outfile) {

FILE *rfp;

FILE *wfp;

char inBuf[MAXBUFLEN];

char outBuf[MAXBUFLEN*4];

if( ( rfp = fopen(infile, "rb") ) == NULL )

{

return -1;

}

if( ( wfp = fopen(outfile, "wb") ) == NULL )

{

return -1;

}

while ( !feof(rfp) )

{

memset( inBuf, 0, sizeof(inBuf) );

memset( outBuf, 0, sizeof(outBuf) );

fgets( inBuf, MAXBUFLEN, rfp );

Convert( inBuf, strlen(inBuf), outBuf, MAXBUFLEN );

fputs( outBuf, wfp );

}

fclose( rfp );

fclose( wfp );

return 0;

}

};

extern int errno;

int main(int argc, char **argv)

{

char *in_gb2312 = "转1换2测c试d";

char in_utf8[MAXBUFLEN];

char out[MAXBUFLEN];

int lri_ret;

memset( in_utf8, 0, sizeof(in_utf8) );

memset( out, 0, sizeof(out) );

// gb2312 --> utf-8

CodeConverter cc = CodeConverter("GB18030","UTF-8");

lri_ret = cc.Convert(in_gb2312,strlen(in_gb2312),out,MAXBUFLEN);

if( lri_ret<0 )

{

cout << "couvert retcode: "<

}

else

{

strcpy( in_utf8, out );

cout << "gb18030-->utf-8 in=" << in_gb2312 << ",out=" << out << endl;

}

cc.ConvertFile( "gb", "utf8-1" );

// utf-8 --> gb2312

CodeConverter cc2 = CodeConverter("UTF-8","GB18030");

lri_ret = cc2.Convert(in_utf8,strlen(in_utf8),out,MAXBUFLEN);

if( lri_ret<0 )

{

cout << "couvert retcode: "<

}

else

{

cout << "utf-8-->gb18030 in=" << in_utf8 << ",out=" << out << endl;

}

cc2.ConvertFile( "utf8", "gb-1" );

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值