问题来源:
正在研究一个程序,输入一个关键字,能够把这个关键字发送到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=%E4%B8%AD%E5%9B%BD&lr=”。汉字“中国”被按照UTF-8的格式进行编码。
不仅汉字进行编码,一些特殊字符也会进行编码。比如搜索“C#”,URL是“http://www.google.com/search?hl=zh-CN&newwindow=1&q=C%23&lr=”。
一般来说,国外的网站都是按照UTF-8编码,而“百度”是按照“GB2312”进行编码的。比如搜索“中国”,URL是“http://www.baidu.com/s?wd=%D6%D0%B9%FA&cl=3”
我们对比一下:C#中国的编码
编码 | 结果 | 网站 |
UTF-8 | C%23%E4%B8%AD%E5%9B%BD | Google |
GB2312 | C%23%D6%D0%B9%FA | BaiDu |
总结:
UTF-8中,一个汉字对应三个字节,GB2312中一个汉字占用两个字节。
不论何种编码,字母数字都不编码,特殊符号编码后占用一个字节。
开始编程:
public static string UrlEncode(string str, string encode)
{
int factor;
if (encode == "UTF-8")
factor = 3;
if (encode == "GB2312")
factor = 2;
//不需要编码的字符
string okChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-*@";
System.Text.Encoder encoder = System.Text.Encoding.GetEncoding(encode).GetEncoder();
char[] c1 = str.ToCharArray();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
//一个字符一个字符的编码
for (int i = 0; i < c1.Length; i++)
{
//不需要编码
if (okChar.IndexOf(c1[i]) > -1)
sb.Append(c1[i]);
else
{
byte[] c2 = new byte[factor];
int charUsed, byteUsed; bool completed;
encoder.Convert(c1, i, 1, c2, 0, factor, true, out charUsed, out byteUsed, out completed);
foreach (byte b in c2)
{
if (b != 0)
sb.AppendFormat("%{0:X}", b);
}
}
}
return sb.ToString().Trim();
}
后来发现更简单的方法。
//按照UTF-8进行编码
string tempSearchString1 = System.Web.HttpUtility.UrlEncode("C#中国");
//按照GB2312进行编码
string tempSearchString2 = System.Web.HttpUtility.UrlEncode("C#中国",System.Text.Encoding.GetEncoding("GB2312"));
大家直接用第二种方法就行了。
因为第一种是自己好不容易编出来的,贴在这里留个纪念。
分享到:
相关推荐
URL编码(也称为百分号编码)是一种机制,用于将特殊字符(如空格、中文字符等)转换为可以在URL中安全传输的形式。在URL中,某些字符有特殊含义,不能直接使用。例如,“&”用于分隔URL参数,“=”用于表示参数名和...
搜集了网上的VBA函数,在excel中通过函数将汉字转为两种类型的URL编码,例如将 天空 二字转化为GB2312的“%CC%EC%BF%D5”或者是UTF-8的 “%E5%A4%A9%E7%A9%BA”。方便用于连接转换。VBA相关函数均来自网上,做了小小...
在HTTP请求中,"+"通常被用作空格的替代,但在URL编码中,它们是两个不同的实体。 4. 非ASCII字符,如中文、日文等,需要使用UTF-8编码转换成多个十六进制序列后再进行URL编码。 URL编码的应用场景包括但不限于: 1...
GBK编码的URL编码过程就是将GBK字符转换为%xx形式的百分号编码,其中xx代表该字符在GBK编码中的16进制值。 本压缩包文件提供了两个工具类,用于对GBK格式的字符串进行URL编码。这两个工具类可能分别采用了不同的...
GET请求的参数通常包含在URL中,如果参数包含中文字符,不进行适当的编码,服务器端收到的可能是乱码。POST请求虽然参数不在URL中,但如果请求体是`application/x-www-form-urlencoded`格式,也需进行类似处理。 ...
### URL中含有中文等非ASCII字符的相关知识点 #### 一、URL与非ASCII字符的基本概念 在互联网中,统一资源定位...通过理解URL编码的工作原理及其在实际应用中的作用,可以更好地设计出可靠且兼容性强的网络应用程序。
易语言URL编码转换模块源码是一个专为易语言...通过深入理解这个模块的工作原理和源码,开发者可以学习到URL编码的标准,以及如何在易语言环境中实现这样的功能,这对于提升他们的编程技能和解决问题的能力大有裨益。
1. 每个非ASCII或特殊字符被替换为"%xy"的形式,其中xy是该字符在UTF-8编码中的前两个十六进制数字。 2. 空格字符(ASCII码20)通常被编码为"%20"。 3. 特殊字符如"&"、"+"和"/"等,由于在URL中有特定含义,也需要...
在Android的WebView组件中,如果需要加载带有中文参数的URL,必须确保对中文参数进行URL编码。例如: ```java String url = "http://example.com/search?query=" + URLEncoder.encode("中文搜索", "UTF-8"); webView...
在IT行业中,编码方式是构建网络通信和存储数据的基础,特别是在处理URL(统一资源定位符)和文件时。本文将深入解析URL和文件的编码方式,以帮助理解这些概念及其在实际工作中的应用。 首先,URL是互联网上访问...
在易语言中进行URL编解码是网络编程中的常见操作,主要用于处理URL(统一资源定位符)中的特殊字符,以确保数据在网络传输过程中的正确性。 URL编解码主要包括两个部分:URLEncode和URLDecode。URLEncode是将URL中...
自己写的,可能有bug,请大家一块学习 环境为PB12 函数(及参数) 作用 arraysort 对一维数组进行排序 decto 将十进制数字转成其它进制字符串 ...urlencode 将指定字符串以进行指定字符集url编码 涨价了,哈哈
在“URL编码转换”这个模块中,我们可能看到的是一个实现类似功能的自定义工具。用户可以输入包含特殊字符的URL,然后通过这个模块将其转换为安全的编码形式,以便在网络中正确地传递。这在处理动态参数、查询字符串...
自动判断URL编码的方法。URL中包含编码的中文的时候,程序获取queryString需要根据url的不同编码,采用不同的解码方式,RequestQueryString方法能够自动识别url是用UTF-8编码还是GB2312编码,从而自动获取争取的值。...
目前大部分的网站,都是使用的UTF-8编码。例如发送一段二进制到服务器时,服务器规定该二进制内容的编码...附件是GB18030包含的21004个汉字的GB18030编码、Unicode编码、URL编码对照表,可用于解决中文乱码转换恢复。
首先,让我们深入理解URL编码的原理。在HTTP协议中,非ASCII字符和某些特殊字符在URL中是不允许出现的。为了包含这些字符,我们需要使用percent encoding(百分号编码),也就是将它们转换为%加两位十六进制数的形式...
总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...
在IT行业中,URL编码与解码是网络编程中不可或缺的一部分,尤其在处理包含特殊字符的网址时显得尤为重要。淘宝作为中国最大的电商平台,其URL中可能包含各种参数,这些参数需要进行正确的编码和解码以确保数据传输的...
在JSP开发中,处理URL编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...