`
andy54321
  • 浏览: 441472 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

中文在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=%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, trueout 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"));

大家直接用第二种方法就行了。
因为第一种是自己好不容易编出来的,贴在这里留个纪念。

 
分享到:
评论

相关推荐

    JS实现URL编码转换中文

    URL编码(也称为百分号编码)是一种机制,用于将特殊字符(如空格、中文字符等)转换为可以在URL中安全传输的形式。在URL中,某些字符有特殊含义,不能直接使用。例如,“&”用于分隔URL参数,“=”用于表示参数名和...

    汉字转为HTML的URL编码

    搜集了网上的VBA函数,在excel中通过函数将汉字转为两种类型的URL编码,例如将 天空 二字转化为GB2312的“%CC%EC%BF%D5”或者是UTF-8的 “%E5%A4%A9%E7%A9%BA”。方便用于连接转换。VBA相关函数均来自网上,做了小小...

    URL编码 URL编码

    在HTTP请求中,"+"通常被用作空格的替代,但在URL编码中,它们是两个不同的实体。 4. 非ASCII字符,如中文、日文等,需要使用UTF-8编码转换成多个十六进制序列后再进行URL编码。 URL编码的应用场景包括但不限于: 1...

    url编码gbk格式

    GBK编码的URL编码过程就是将GBK字符转换为%xx形式的百分号编码,其中xx代表该字符在GBK编码中的16进制值。 本压缩包文件提供了两个工具类,用于对GBK格式的字符串进行URL编码。这两个工具类可能分别采用了不同的...

    java使用URLDecoder和URLEncoder对中文字符进行编码和解码

    GET请求的参数通常包含在URL中,如果参数包含中文字符,不进行适当的编码,服务器端收到的可能是乱码。POST请求虽然参数不在URL中,但如果请求体是`application/x-www-form-urlencoded`格式,也需进行类似处理。 ...

    URL中如果含有中文等非ASCII字符

    ### URL中含有中文等非ASCII字符的相关知识点 #### 一、URL与非ASCII字符的基本概念 在互联网中,统一资源定位...通过理解URL编码的工作原理及其在实际应用中的作用,可以更好地设计出可靠且兼容性强的网络应用程序。

    易语言URL编码转换模块源码

    易语言URL编码转换模块源码是一个专为易语言...通过深入理解这个模块的工作原理和源码,开发者可以学习到URL编码的标准,以及如何在易语言环境中实现这样的功能,这对于提升他们的编程技能和解决问题的能力大有裨益。

    URL编码解码小程序

    1. 每个非ASCII或特殊字符被替换为"%xy"的形式,其中xy是该字符在UTF-8编码中的前两个十六进制数字。 2. 空格字符(ASCII码20)通常被编码为"%20"。 3. 特殊字符如"&"、"+"和"/"等,由于在URL中有特定含义,也需要...

    URL中文转换

    在Android的WebView组件中,如果需要加载带有中文参数的URL,必须确保对中文参数进行URL编码。例如: ```java String url = "http://example.com/search?query=" + URLEncoder.encode("中文搜索", "UTF-8"); webView...

    解析URL和文件的编码方式

    在IT行业中,编码方式是构建网络通信和存储数据的基础,特别是在处理URL(统一资源定位符)和文件时。本文将深入解析URL和文件的编码方式,以帮助理解这些概念及其在实际工作中的应用。 首先,URL是互联网上访问...

    易语言URL编解码

    在易语言中进行URL编解码是网络编程中的常见操作,主要用于处理URL(统一资源定位符)中的特殊字符,以确保数据在网络传输过程中的正确性。 URL编解码主要包括两个部分:URLEncode和URLDecode。URLEncode是将URL中...

    PB 进制转换 url编码 urlencode urldecode 数组排序

    自己写的,可能有bug,请大家一块学习 环境为PB12 函数(及参数) 作用 arraysort 对一维数组进行排序 decto 将十进制数字转成其它进制字符串 ...urlencode 将指定字符串以进行指定字符集url编码 涨价了,哈哈

    URL编码转换-模块

    在“URL编码转换”这个模块中,我们可能看到的是一个实现类似功能的自定义工具。用户可以输入包含特殊字符的URL,然后通过这个模块将其转换为安全的编码形式,以便在网络中正确地传递。这在处理动态参数、查询字符串...

    c#自动判断URL编码方法

    自动判断URL编码的方法。URL中包含编码的中文的时候,程序获取queryString需要根据url的不同编码,采用不同的解码方式,RequestQueryString方法能够自动识别url是用UTF-8编码还是GB2312编码,从而自动获取争取的值。...

    GB18030汉字的GB18030 Unicode URL编码对照表.xlsx

    目前大部分的网站,都是使用的UTF-8编码。例如发送一段二进制到服务器时,服务器规定该二进制内容的编码...附件是GB18030包含的21004个汉字的GB18030编码、Unicode编码、URL编码对照表,可用于解决中文乱码转换恢复。

    swift-url分类解决URL里面的空格中文及其他特殊字符问题

    首先,让我们深入理解URL编码的原理。在HTTP协议中,非ASCII字符和某些特殊字符在URL中是不允许出现的。为了包含这些字符,我们需要使用percent encoding(百分号编码),也就是将它们转换为%加两位十六进制数的形式...

    java中文乱码之解决URL中文乱码问题的方法

    总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...

    淘宝 url 解码和编码方法(转的)

    在IT行业中,URL编码与解码是网络编程中不可或缺的一部分,尤其在处理包含特殊字符的网址时显得尤为重要。淘宝作为中国最大的电商平台,其URL中可能包含各种参数,这些参数需要进行正确的编码和解码以确保数据传输的...

    jsp使用URL编码传递中文参数问题.doc

    在JSP开发中,处理URL编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...

Global site tag (gtag.js) - Google Analytics