首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > CGI >

cgi的编码有关问题

2012-02-02 
cgi的编码问题!我编了一个16进制转化为中文字符的程序,页面是utf-8编码的,不知道怎么的“中”字的16进制编码

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收到了数据,解码应该就没问题呀,你在仔细检查下,
解码原理就是这样.
呵呵,祝你顺利.

热点排行