蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 | -->
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程 -->


    

蓝森林 http://www.lslnet.com 2006年8月16日 14:08

url里面有中文地址的问题

在linux下的c语言的程序里中
如何url地址里面的中文地址
给识别出来

比如
本来的url是
http://202.202.76.153/avi/媒体/速度.avi
但是在c语言里面得到的是
http://202.202.76.153/avi/%C3%BD%CC%E5/%CB%D9%B6%C8.avi

怎么才能把
这些字符
/%C3%BD%CC%E5/%CB%D9%B6%C8.avi
转换成
/媒体/速度.avi


希望各位大侠指点迷津
谢谢


Re: url里面有中文地址的问题

%XX 是指ascii值为 XX 的半角字符。

Re: url里面有中文地址的问题

大侠给具体改怎么转化
给指点一下可否
多谢

Re: url里面有中文地址的问题

俺有perl写的,原理都是一样的,只不过perl帮助实现了一些转换函数.
sub Decode {
my $Class=shift;
my $Code=@_;
$Code=~ tr/\+/ /;
$Code=~ s/%([a-f0-9][a-f0-9])/chr(hex($1) )/egi;
return \$Code;
}
sub Encode {
my $Class=shift;
my $Code=@_;
$Code=~ s/([^a-z0-9_.!~*'() -])/sprintf "%%%02X", ord($1)/egi;
$Code=~ tr/ /+/;
return \$Code;
}

Re: url里面有中文地址的问题

谢谢楼上大侠
大概说一下您的思路可否?

Re: url里面有中文地址的问题

如果遇到一个百分号则将后面的两个字符使用十六进制进行转换为一个字符,否则直接取值.下面是大概的原理


char a[100];
char temp[3];
unsigned char b[100];
int i,j;

strcpy(a, "abc%C3%BD%20");
temp[2]=0;
for(i = 0,j = 0 ; i < len; i ++, j++)
{
if(a[i] == '%')
{
temp[0] = a[i + 1];
temp[1] = a[i + 2];
/* 没有考虑实际中为'%'的情况 */
b[j] = strtol(temp,NULL,16);
i += 2;
}
else
{
b[j] = a[i];
}
}



Re: url里面有中文地址的问题

谢谢大侠
问题解决啦
真的太感谢您啦

祝你天天好运天天开心



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com