C# 中文在URL中的编码 utf8 gb2312

C# 中文在URL中的编码

正在研究一个程序,输入一个关键字,能够把这个关键字发送到Google,yahoo等搜索引擎,进行搜索,然后打开结果网页。原理很简单。比如在Google搜索China,搜索结果页面的URL就是“http://www.google.com/search?hl=zh-CN&q=China&lr=”。只要替换红颜色的内容,就可以按照不同的关键字搜索。

但是如果关键字是中文,就会出现问题。比如在google搜索“中国”,Url是“http://www.google.com/search?hl=zh-CN&newwindow=1&q=中国&lr=”。汉字“中国”被按照UTF-8的格式进行编码。

不仅汉字进行编码,一些特殊字符也会进行编码。比如搜索“C#”,URL是“http://www.google.com/search?hl=zh-CN&newwindow=1&q=C#&lr=”。

一般来说,国外的网站都是按照UTF-8编码,而“百度”是按照“GB2312”进行编码的。比如搜索“中国”,URL是“http://www.baidu.com/s?wd=�й�&cl=3”

我们对比一下:C#中国的编码

编码 结果 网站
UTF-8 C#中国 Google
GB2312 C#�й� BaiDu

总结:
UTF-8中,一个汉字对应三个字节,GB2312中一个汉字占用两个字节。
不论何种编码,字母数字都不编码,特殊符号编码后占用一个字节。

//按照UTF-8进行编码
string tempSearchString1 = System.Web.HttpUtility.UrlEncode("C#中国");
//按照GB2312进行编码
string tempSearchString2 = System.Web.HttpUtility.UrlEncode("C#中国",System.Text.Encoding.GetEncoding("GB2312"));

<wbr></wbr>

//--------------------------------------------------------------------------------------------------------------

【转】ASP.NET中c#的URL编码处理
要解决的问题:
将下面的URL作为一个参数传到其他的页面
1 http://domain/de.apx?uid=12&page=15
2 url后面的参数中出现汉字等,如: ....aspx?title=起重机
在出现上面的情况的时候,必须经过一个RUL编码和解码的过程,否则会出现错误.


代码如下:


//传值
string temp = "

//在另外一个文件中取从上面传的值
if (Request.QueryString["url"] != null)
{
<wbr><wbr><wbr> string url = Server.UrlDecode(Request.QueryString["url"].ToString());<br><wbr><wbr><wbr> this.txtAddress.Text = url;<br> }<br> if (Request.QueryString["title"] != null)<br> {<br><wbr><wbr><wbr> string title = Server.UrlDecode(Request.QueryString["title"].ToString());<br><wbr><wbr><wbr> this.txtTitle.Text = title;<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

//-----------------------------------------------

URL编码对照表

1、string s = System.Web.HttpUtility(byte[] data);

这里的s即为转换出来的URL编码,需要注意的是这里的byte数组必须是具有ASCII意义的数组,由string通过System.Text.Encoding.Default.getBytes(str.ToCharArray());是不正确的,不能正确转义!

2、根据URL编码规则写个小程序

private string UrlEncode(byte[] byt)
<wbr> {<wbr><wbr><br><wbr><wbr><wbr><wbr> string<wbr> desstr = "";<wbr><wbr><br><wbr><wbr><wbr><wbr> for(int i=0; i<br><wbr><wbr><wbr><wbr> {<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr> desstr += "%";<wbr><wbr><br><wbr><wbr><wbr><wbr><wbr> desstr += byt[i].ToString("X2");<wbr><wbr><br><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr> return desstr;<br><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

以下是URL编码对照表:

backspace
tab<wbr><wbr><wbr><wbr><wbr><wbr><br> linefeed<wbr><br> creturn<wbr><wbr><br> space<wbr><wbr><wbr><wbr><br> !<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> !<br> "<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> "<br> #<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> #<br> $<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> $<br> %<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> %<br> &amp;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &amp;<br> '<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> '<br> (<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> (<br> )<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> )<br> *<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> *<br> +<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> +<br> ,<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ,<br> -<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> -<br> .<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> .<br> /<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> /<br> 0<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 0<br> 1<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 1<br> 2<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 2<br> 3<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 3<br> 4<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 4<br> 5<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 5<br> 6<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 6<br> 7<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 7<br> 8<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 8<br> 9<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 9<br> :<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> :<br> ;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ;<br> &lt;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;<br> =<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> =<br> &gt;<wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值