读书人

cgi的编码有关问题

发布时间: 2012-02-02 23:57:14 作者: rapoo

cgi的编码问题!
我编了一个16进制转化为中文字符的程序,页面是utf-8编码的,不知道怎么的“中”字的16进制编码(%D6%D0%AD)能转换可其他的文字却转不过来,还请高手指教!
代码如下:
#include <stdio.h>
#include <string.h>

int n;
char num[];
int k=0;

void shortt(char s[]) //数组s[]里面存放键盘输入的16进制数,目的是
{
int i;
n=0;
for(i=0;s[i]!='\0';i++)
{
if(s[i]>='0'&&s[i]<='9')
{
n=n*16+s[i]-'0';
}
if(s[i]>='a'&&s[i]<='f')
{
n=n*16+s[i]-'a'+10;
}
if(s[i]>='A'&&s[i]<='F')
{
n=n*16+s[i]-'A'+10;
}
}
}


void read(char* string) //将%与字母拆分开,然后传入上面的shortt()转化为10进制数字
{
int j=strlen(string)-1;
int i;
for(i=0;i<j;i++)
{
if(string[i]=='%')
{
char temp[2];
temp[0]=string[i+1];
temp[1]=string[i+2];
shortt(temp);
num[k]=n; //将第一个%后面的两个字母的十进制数存入数组
k++;
}
}

}


main()
{
read("%E9%AB%98"); //这个16进制的“高”字就转化不过来,而(%D6%D0%AD)就可以正常显示“中”
k=0;
printf("%s",num);
}


[解决办法]

C/C++ code
#include<stdio.h>#include<string.h>int hex_to_dec(char *ptr){    int dec=0;    dec=hex_posi(++ptr)*16;    dec+=hex_posi(++ptr);    return dec;}int hex_posi(char *ptr){    char *list="0123456789ABCDEF";    int posi=0;    while(*ptr!=*list++){        posi++;    }    return posi;}void decode(char c[]){    char *tmp=c;    char buf[1024];    int posi=0,i=0;    while(*tmp){        if(tmp[posi]=='%')        {            buf[i]=hex_to_dec(tmp+posi);            posi+=2;        }        else        {            buf[i]=tmp[posi];        }        i++;        tmp++;    }    buf[i]=0;    printf("%s\n",buf);}int main(){    char c[]="%E9%AB%98";    decode(c);    return 0;}
[解决办法]
感觉和apache的关系不大呀
页面编码都统一,apache会自动将post数据编码
然后cgi收到了数据,解码应该就没问题呀,你在仔细检查下,
解码原理就是这样.
呵呵,祝你顺利.

读书人网 >CGI

热点推荐