怎么实现百度的那种url编码呀? 如果我在百度里面搜 ray() , 它会编码成 ray%28%29,我这里用C# 的 HttpUtility.UrlEncode(); 结果还是得到 ray(),请问怎么才能编码成向百度这样。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 net_lover 于 2011-09-23 15:53:46 编辑 ( %28) %29是Url编码,你怎么得到的结果,使用Request是经过解码了的。 Asp.Net是利用Server下的UrlEncode方法与UrlDncode方法来对Url进行编解码的。Server.UrlEncode(string s)--对s进行Url编码:Server.UrlDncode(string s)--对s进行Url解码:UrlEncode会将空格编码为+,不会对~Z、a~z、0~9、-、_、.、!、*、\、(、)这些字符编码,因为这些字符是被认为是安全的字符,其它的字符就会被编码成为%开头的十六制的字符。比如,我们对"您好"两个字进行编码:示例:protected override void OnInit(EventArgs e){ Response.Write(Server.UrlEncode("您好"));}输出:%e6%82%a8%e5%a5%bd我们再将上面编码后的字符解码:示例:protected override void OnInit(EventArgs e){ Response.Write(Server.UrlDecode("%e6%82%a8%e5%a5%bd"));}输出:您好有的时候,我们在网上下载文件,在网站上看到的文件名是正常的,但在保存提示框中显示的文件名却是乱码,这就是没有对文件名进行编码的原因。注意:1,不要对整个Url地址进行编码:例如:protected void Button1_Click(object sender, EventArgs e){ Response.Redirect(Server.UrlEncode("http://www.lmwlove.com"));}这样,浏览器就认不到你的Url地址了,因为url上面的url地址已经被编码成http%3a%2f%2fwww.lmwlove.com了。2,#字符是不会被编码的,因为#在url代表的是锚点,有特殊意义,它会截断Url中自身右边的字符,#字符右边的字符是不会发送到服务器端,右边的字符主要用来让浏览器定义到网页中定义好的锚点位置。所以,除了锚点功能外,我们不要在url将#做为参数传递。 参考:http://www.lmwlove.com/ac/ID620 我觉得百度的这种编码方式是自己写的,LZ完全可以自己实现我这里有个是最所以字符都进行编码的,LZ参考下//编码 public static string Encode(this string str) { string codeword = ""; byte[] by = Encoding.Default.GetBytes(str); foreach (byte b in by) { codeword = codeword + "%" + b.ToString("X"); } return codeword; }//解码 public static string Decode(this string str) { string[] strlist = str.Split(new string[] { "%" }, StringSplitOptions.RemoveEmptyEntries); byte[] by = new byte[strlist.Length]; for (int i = 0; i < strlist.Length; i++) { string temp = strlist[i]; int inttemp = ToInt(AnyToTen(temp, 16)); if (inttemp > 0) by[i] = byte.Parse(inttemp.ToString()); else return ""; } return Encoding.Default.GetString(by); } 额..不好意思,ToInt是转换成整数的方法,AnyToTen(temp, 16)是16进制转换成10进制的,LZ可以用其他方法代替 private static long Test(string hexStr) { char[] charList = hexStr.ToCharArray(); long result = 0; for (int i = 0; i < charList.Length; i++) { result += HexChar2Dec(charList[charList.Length - 1 - i]) * Power(16, i); } return result; }16进制转10进制 本帖最后由 net_lover 于 2011-09-23 16:42:15 编辑 后来我模拟了一下,这种urlencode不翻译过去也是支持的。 学习啦! 可是,百度的不是gbk2312编码吗?而google 是 utf-8的,怎么分别把‘您好’分别转换呢? 多个客户端访问同一数据库的同一张表的问题? 帮忙看下分页这样写好不好? 结构体的事 求教,c#如何在屏幕上显示消息? 小弟疼苦一星期没办法了。1000分求一个类。 如何在一个图像下创建一个阴影? DatGridView加载数据和分页!(在线==) 关于系统时间的问题。急! datatable列标题问题!! 编译时,系统提示程序集被进程占用、无法输出是什么原因?高分求救! 编码规范问题? 获得其它进程的命令行参数
) %29是Url编码,你怎么得到的结果,使用Request是经过解码了的。
Asp.Net是利用Server下的UrlEncode方法与UrlDncode方法来对Url进行编解码的。
Server.UrlEncode(string s)--对s进行Url编码:
Server.UrlDncode(string s)--对s进行Url解码:UrlEncode会将空格编码为+,不会对~Z、a~z、0~9、-、_、.、!、*、\、(、)这些字符编码,因为这些字符是被认为是安全的字符,其它的字符就会被编码成为%开头的十六制的字符。比如,我们对"您好"两个字进行编码:
示例:protected override void OnInit(EventArgs e)
{
Response.Write(Server.UrlEncode("您好"));
}
输出:%e6%82%a8%e5%a5%bd我们再将上面编码后的字符解码:
示例:protected override void OnInit(EventArgs e)
{
Response.Write(Server.UrlDecode("%e6%82%a8%e5%a5%bd"));
}
输出:您好有的时候,我们在网上下载文件,在网站上看到的文件名是正常的,但在保存提示框中显示的文件名却是乱码,这就是没有对文件名进行编码的原因。注意:
1,不要对整个Url地址进行编码:例如:protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect(Server.UrlEncode("http://www.lmwlove.com"));
}
这样,浏览器就认不到你的Url地址了,因为url上面的url地址已经被编码成http%3a%2f%2fwww.lmwlove.com了。2,#字符是不会被编码的,因为#在url代表的是锚点,有特殊意义,它会截断Url中自身右边的字符,#字符右边的字符是不会发送到服务器端,右边的字符主要用来让浏览器定义到网页中定义好的锚点位置。所以,除了锚点功能外,我们不要在url将#做为参数传递。
参考:http://www.lmwlove.com/ac/ID620
我这里有个是最所以字符都进行编码的,LZ参考下//编码
public static string Encode(this string str)
{
string codeword = "";
byte[] by = Encoding.Default.GetBytes(str);
foreach (byte b in by)
{
codeword = codeword + "%" + b.ToString("X");
}
return codeword;
}//解码
public static string Decode(this string str)
{
string[] strlist = str.Split(new string[] { "%" }, StringSplitOptions.RemoveEmptyEntries);
byte[] by = new byte[strlist.Length];
for (int i = 0; i < strlist.Length; i++)
{
string temp = strlist[i];
int inttemp = ToInt(AnyToTen(temp, 16));
if (inttemp > 0)
by[i] = byte.Parse(inttemp.ToString());
else
return "";
}
return Encoding.Default.GetString(by);
}
private static long Test(string hexStr)
{
char[] charList = hexStr.ToCharArray();
long result = 0;
for (int i = 0; i < charList.Length; i++)
{
result += HexChar2Dec(charList[charList.Length - 1 - i]) * Power(16, i);
}
return result;
}
16进制转10进制
而google 是 utf-8的,怎么分别把‘您好’分别转换呢?