cgi编程里的中文

xiaoshun123 2010-09-09 05:48:57
简介:
cgi做的嵌入式webserver。

现象:
当从页面的控件上获取汉字时,post过来的数据中,汉字部分是%CE%B4%B1%C8%B6%D4这种形式的。

问题:
这是什么编码?
在cgi程序中一般怎么使用(处理)呢?
...全文
235 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 subfate 的回复:]
如果真的要check,还是ascii码来得简单、容易。从那个query_string中查找,先找到关键字,如username和password,=后面的就是输入的字符了,将其存入某个变量,就可以比较了。
另外,如果要显示中文,如“张三”,可以做个别名(像一般网站文章标题那种),如"zhang",找到zhang,就知道是“张三”而不是“李四”。
这些,我是从一个网站上找到的,它使用avr单片机构……
[/Quote]


“将其存入某个变量,就可以比较了。”
恩?怎么存呢?存完就成了“张三”?
李迟 2010-09-13
  • 打赏
  • 举报
回复
如果真的要check,还是ascii码来得简单、容易。从那个query_string中查找,先找到关键字,如username和password,=后面的就是输入的字符了,将其存入某个变量,就可以比较了。
另外,如果要显示中文,如“张三”,可以做个别名(像一般网站文章标题那种),如"zhang",找到zhang,就知道是“张三”而不是“李四”。
这些,我是从一个网站上找到的,它使用avr单片机构建一个web服务器。
主页:http://www.tuxgraphics.org/electronics/
我参考的:http://www.tuxgraphics.org/electronics/200606/article06061.shtml
可以看看里面处理提交字符串的程序。
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 subfate 的回复:]
“%CE%B4%B1%C8%B6%D4”与“张三”,在我们看来是两种形式,可能在计算机看来是一回事。
[/Quote]


我觉得这个说法是对的。
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 subfate 的回复:]
未解码:username=%C0%EE%B3%D9&password=Late+Lee
解码: username=李迟&password=Late Lee
上面是我的程序的输出,当然,它很简单,直接使用getenv("QUERY_STRING")返回的字符串,再使用printf输出。可以看到,汉字以及空格的“编码”形式。

对于编码我不太懂。

我用char[10]存放……
[/Quote]


谢谢您!
我问一下:直接使用getenv("QUERY_STRING")返回的字符串应该是这种形式的“username=%C0%EE%B3%D9&password=Late+Lee”。如果你想看一下这个用户名、密码是否OK,而你的下位机数据库里面存放的是“username=李迟&password=Late Lee”,你怎么来比较呢?怎么来check?
李迟 2010-09-13
  • 打赏
  • 举报
回复
“%CE%B4%B1%C8%B6%D4”与“张三”,在我们看来是两种形式,可能在计算机看来是一回事。
李迟 2010-09-13
  • 打赏
  • 举报
回复
未解码:username=%C0%EE%B3%D9&password=Late+Lee
解码: username=李迟&password=Late Lee
上面是我的程序的输出,当然,它很简单,直接使用getenv("QUERY_STRING")返回的字符串,再使用printf输出。可以看到,汉字以及空格的“编码”形式。

对于编码我不太懂。

我用char[10]存放“张”,那么我就直接比较0xCE与char[0],0xB4与char[1]的数值。
---------------------------
我不知行不行。
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaoshun123 的回复:]
引用 1 楼 mocom 的回复:
%表示在它之后的两个字节是字节的十六进制表达方式
%CE%B4%B1%C8%B6%D4
解码成
0xCE,0xB4,0xB1,0xC8,0xB6,0xD4



恩,这个我知道。它是按照gb编码来的?
它与汉字的对应有个表。
但是处理的时候是不是不需要查什么表,就可以对比呀?

“处理”:
一个是从网页获取来的“%CE%B4%B1%C8……
[/Quote]



比如:(张->可能就是0xCE,0xB4。)

我用char[10]存放“张”,那么我就直接比较0xCE与char[0],0xB4与char[1]的数值。
这样就可以知道是否是同一字符了吗?
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mocom 的回复:]
%表示在它之后的两个字节是字节的十六进制表达方式
%CE%B4%B1%C8%B6%D4
解码成
0xCE,0xB4,0xB1,0xC8,0xB6,0xD4
[/Quote]


恩,这个我知道。它是按照gb编码来的?
它与汉字的对应有个表。
但是处理的时候是不是不需要查什么表,就可以对比呀?

“处理”:
一个是从网页获取来的“%CE%B4%B1%C8%B6%D4”;一个是本地数据库保存的“张三”。
我如何能知道这两个是否:是同一个字符串呢?
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 subfate 的回复:]
楼主,我直接在程序中将url解码,在Web中输入汉字后,经过cgi,可以在网页中显示汉字。
不过不知你说的处理是指什么。
[/Quote]

“处理”:
一个是从网页获取来的“%CE%B4%B1%C8%B6%D4”;一个是本地数据库保存的“张三”。
我如何能知道这两个是否:是同一个字符串呢?
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 subfate 的回复:]
C/C++ code
#include <string.h>
#include <stdio.h>
int main(void)
{
char a[] = {0xC0,0xEE,0xB3,0xD9,0x00};
char b[] = "李迟";
if (strcmp(a,b) == 0)
printf("good\n");
else……
[/Quote]

正解!谢谢了
李迟 2010-09-13
  • 打赏
  • 举报
回复
#include <string.h>
#include <stdio.h>
int main(void)
{
char a[] = {0xC0,0xEE,0xB3,0xD9,0x00};
char b[] = "李迟";
if (strcmp(a,b) == 0)
printf("good\n");
else
printf("no good\n");
return 0;
}

vc6.0下比较,a与b一样。
xiaoshun123 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 subfate 的回复:]
比较的是ascii,因为这样处理容易些。
这个变量,可以是数组。
不过,如果你要使用%CE%B4%B1%C8%B6%D4这种汉字形式来比较,我就没辙了。
[/Quote]

给您个例子:
char a[]= "%CE%B4%B1%C8%B6%D4";
char b[]= "张三";
怎么比较a与b是否相等?用实际代码形式表示一下呗,谢谢。
李迟 2010-09-13
  • 打赏
  • 举报
回复
比较的是ascii,因为这样处理容易些。
这个变量,可以是数组。
不过,如果你要使用%CE%B4%B1%C8%B6%D4这种汉字形式来比较,我就没辙了。
mocom 2010-09-10
  • 打赏
  • 举报
回复
%表示在它之后的两个字节是字节的十六进制表达方式
%CE%B4%B1%C8%B6%D4
解码成
0xCE,0xB4,0xB1,0xC8,0xB6,0xD4
李迟 2010-09-10
  • 打赏
  • 举报
回复
楼主,我直接在程序中将url解码,在Web中输入汉字后,经过cgi,可以在网页中显示汉字。
不过不知你说的处理是指什么。

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧