gb2312如何转换汉字,求指点.....
假如现有我收到16进制 BO A1这2个字节我怎样才能输出汉字‘啊’呢。
如果我接收的不只是BO A1还有别的汉字,是不是需要把gb2312的码表都写到程序里面。
是写个函数来实现还是直接就可以用C++提供的函数来实现?
小弟新手,请大家见谅。 c++
[解决办法]
直接输出就可以了, printf啊
[code=c]
#include <stdio.h>
int main(void)
{
char s[] = { 0xb0, 0xa1, 0x00 };
printf("%s\n", s);
return 0;
}
[/code
[解决办法]
如果你的系统本身就是GB2312或者是GBK的内码,那么直接输出即可;如果你的系统是其它内码的话,那么需要用iconv进行转换,例如UTF-8需要这样做:
#include <iconv.h>
#include <string.h>
#include <stdio.h>
//代码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}
int main(void)
{
char gb2312[] = { 0xb0, 0xa1, 0x00 };
char utf8[81];
g2u(gb2312, strlen(gb2312), utf8, 80);
printf("%s\n", utf8);
return 0;
}