CGI中的中文解码(C++语言版本)

CGI程序是构建WEB数据库应用的关键应用程序或者说网关程序。一般来讲CGI程序并不直接同IE浏览器打交道,而是由WEB服务器通过环境变量来接收或发送信息,CGI程序仅和WEB服务器的环境变量打交道。浏览器经常用POST方法将信息传递给环境变量。浏览器在碰到特殊字符时,如汉字,浏览器并不直接将特殊字符发送给WEB服务器,而是先将特殊字符的ASCII码转化成十六进制(如汉字“普通”的十六进制为:%C6%D5 %CD%A8),在发送出去。CGI程序在读取环境变量时,不但要对读取的字符串解析还要对特殊字符解码,目前市场上的CGI书籍大都针对PERL语言,但用C语言编写CGI的程序员,大都很难查到具体的解码过程,本人向大家提供一个完整的解码例子,他在VC++下编译通过,并能完好运行(直接编译并运行下面的例子,输入 “%C6%D5%CD%A8”,将输出“普通”两个字。总共包括两个文件:main.cpp, main.h

我们先看main.cpp :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "main.h"
void main(void)

{

char line[80];

class decode_string unscape_str;

while(1)

{

printf("input your code string or exit

to close:/n");

gets(line);

if(!strcmp(line,"exit")) break;

printf("this decode string is:%s/n", unscape_str.translate_to_chinesse(line));

}

}

在看main.h:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

class decode_string{
private:

public:

char *translate_to_chinesse(char *);

};

char *decode_string::translate_to_chinesse

(char *dest_str)

{ register int x = 0, y = 0;

char *temp_str = NULL;

char ascii_one,ascii_two;

temp_str = (char *)malloc(strlen(dest_str) * sizeof(char) +1);

while(temp_str[x])

{

if((temp_str[x] = dest_str[y]) == '%')

{ if(dest_str[y+1] >= 'A')

ascii_one = ((dest_str[y+1] & 0xdf) - 'A') + 10;

else ascii_one = dest_str[y+1] - '0';

if(dest_str[y+2] >= 'A') ascii_two = ((dest_str[y+2] & 0xdf) - 'A') + 10;

else ascii_two = dest_str[y+2] -'0';

temp_str[x] = ascii_one * 16 + ascii_two; y += 2;

} x++;y++; } temp_str[x] = '/0';

return (temp_str);

}

在上面例子中,仅有的一个成员函数char *decode_string::translate_to_chinesse(char *dest_str)是一个完整的解码函数,喜欢用C语言的朋友可单独将它加到你的程序中;喜欢C++的朋友可根据自己的需要来增加这个类的功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值