主题:UTF-8字符串转换成GBK字符串,使用iconv库函数该怎么处理!
honemay
[专家分:60] 发布于 2010-05-11 15:06:00
比如“%E9%9D%92”对应汉字“青”,我使用下面这种方法能搞定一半
char instr[4];
instr[0] = 0xe9;
instr[1] = 0x9d;
instr[2] = 0x92;
instr[3] = 0;
然后在用iconv函数可以转换得到“青”。
但现在我需要对字符串“123,she%E9%9D%92”解释成“123,she青”....
不知道该怎么做了。。。
回复列表 (共1个回复)
沙发
honemay [专家分:60] 发布于 2010-05-11 16:41:00
我自己写的。。可以转换成功了
int toint(char ch) //16进制转换为10进制
{
int des;
switch(ch)
{
case '0': des = 0; break;
case '1': des = 1; break;
case '2': des = 2; break;
case '3': des = 3; break;
case '4': des = 4; break;
case '5': des = 5; break;
case '6': des = 6; break;
case '7': des = 7; break;
case '8': des = 8; break;
case '9': des = 9; break;
case 'a': des = 10; break;
case 'A': des = 10; break;
case 'b': des = 11; break;
case 'B': des = 11; break;
case 'c': des = 12; break;
case 'C': des = 12; break;
case 'd': des = 13; break;
case 'D': des = 13; break;
case 'e': des = 14; break;
case 'E': des = 14; break;
case 'f': des = 15; break;
case 'F': des = 15; break;
default: break;
}
return des;
}
void utf8togbk(char* src, char* des) //将utf-8编码的字符串转换为 GB2312编码
{
char outbuf[256]; //输出的字符串
size_t len = strlen(src);
char instr[256] = {0}; //输入字符串解码后的字符串
for (int k =0, j =0; k < len;) //将输入的字符串中汉字进行解码
{
if (src[k] != '%')
{
instr[j] = src[k];
k++;
j++;
continue;
}
instr[j] = 16 * toint(src[++k]) ;
instr[j] += toint(src[++k]);
k++;
j++;
}
size_t inlen = strlen(instr);
size_t outlen = sizeof(outbuf);
iconv_t cd; //使用iconv库函数进行编码转换
char *pin = instr;
char *pout = outbuf;
cd = iconv_open("gb2312","utf-8"); //将源utf-8编码转换为gb2312
if (cd==0) return;
memset(outbuf,0,outlen);
if (iconv(cd,&pin,&inlen,&pout,&outlen)==-1) return;
iconv_close(cd);
strcpy(des, outbuf);
}
我来回复