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;
}