我在VC++6.0中要向web服务器通过url传送中文字符,CodeGuru上的一个程序只是对ASCII中的特殊字符进行了编码,不知中文字符如何处理?

解决方案 »

  1.   

    /**********************************************************************
    * URL编码函数
    * 在这里要注意,编译器在处理中文字符时,会自动根据字符的位7来读入一个
    * 或两个字符,这时可以强制采用unsigned char *来读入一个字符。
    ***********************************************************************/
    int PubFunc::URLEncode (const char* in, char* out)
    {
    if (!in || !out) return 0; for( ; *in != 0; in++)
    {
    unsigned char *p=(unsigned char*)in; if (*p == ' ')
    {
    *out = '%';
    *(out + 1) = '2';
    *(out + 2) = '0';
    out += 3;
    }
    else if (*p == ' ' || *p == '%' || *p == '/' || *p & 0x80)
    {
    char a[3]; *out = '%';
    sprintf(a, "%02x", *p);
    *(out + 1) = a[0];
    *(out + 2) = a[1];
    out += 3;
    }
    else
    {
    *out = *p;
    out++;
    }
    }//end for *out = 0; return 0; 
    }/**********************************************************************
    * URL解码函数
    ***********************************************************************/
    int PubFunc::URLDecode (const char* in, char* out)
    {
    if (!in || !out) return 0; for( ; *in != 0; in++)
    {
    if(*in == '+')
    {
    *out = ' ';
    out++;
    }
    else if(*in == '%')
    {
    int code; if (sscanf(in + 1, "%02x", &code) != 1) code = '?';
    *out = code;
    in += 2;
    out++;
    }
    else
    {
    *out = *in;
    out++;
    }
    } *out = 0; return 0;
    }