中文在URL中的编码
来源:互联网 发布:网络作家富豪榜 2016 编辑:程序博客网 时间:2024/05/01 12:11
中文在URL中的编码
总结:
UTF-8中,一个汉字对应三个字节,GB2312中一个汉字占用两个字节。
不论何种编码,字母数字都不编码,特殊符号编码后占用一个字节。
开始编程:
问题来源:
正在研究一个程序,输入一个关键字,能够把这个关键字发送到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中,一个汉字对应三个字节,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();
}
{
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"));
string tempSearchString1 = System.Web.HttpUtility.UrlEncode("C#中国");
//按照GB2312进行编码
string tempSearchString2 = System.Web.HttpUtility.UrlEncode("C#中国",System.Text.Encoding.GetEncoding("GB2312"));
大家直接用第二种方法就行了。
因为第一种是自己好不容易编出来的,贴在这里留个纪念。
分类: 2..NET新手区,.Net技术
好文要顶关注我 收藏该文
0
0
«上一篇:新丁报到,大家好。
»下一篇:折叠解决方案
»下一篇:折叠解决方案
posted on 2005-10-14 13:55 旻 阅读(9762) 评论(8)编辑 收藏
评论:
- #1楼 Rick Posted @ 2005-11-16 12:37请问ASP的VBSCRIPT实现是什么?非常感谢!支持(0)反对(0)
- #2楼 yet_another_someone Posted @ 2006-02-10 18:32php如何实现?
php自带urlencode函数返回的utf-8编码都是双字节的。支持(0)反对(0) - #3楼[楼主] 旻 Posted @ 2006-02-15 13:41@yet_another_someone
没用过PHP,不过我觉得如果是双字节的应该不是utf-8的。我推测的,希望大家证实一下。支持(0)反对(0) - #4楼 过路者 Posted @ 2006-05-29 10:04非常感谢支持(0)反对(0)
- #5楼 Xcer Posted @ 2007-03-30 15:00太有用了,终于找到答案了,狂谢谢楼主支持(0)反对(0)
- #6楼 約三 Posted @ 2007-09-21 13:40どうも支持(0)反对(0)
- #7楼 gfans Posted @ 2007-11-23 19:10挖塞,火星贴,留念!支持(0)反对(0)
- #8楼13841042008/11/27 16:40:25 AlexLiu Posted @ 2008-11-27 16:40这么多年之后才开始研究lzn年前研究过的问题,真是惭愧啊。。支持(0)反对(0)
0 0
- 中文在URL中的编码
- 中文在URL中的编码
- C# 中文在URL中的编码
- 中文在URL中的传递
- 对url中的中文参数进行编码
- java 编码URL中的空格,中文
- 对url中的中文参数进行url编码
- url传递中的特殊符号的编码以及中文编码
- url中文编码转换
- 中文URL编码
- 中文URL编码
- 中文URL编码
- 中文url编码
- URL中文字符编码
- 中文URL编码
- url中文编码
- URL中文编码问题
- iOS url中文编码
- 最轻的天平
- 一个关于指针数组的例子
- 【JAVA设计模式】——设计原则
- caffe学习系列四Sigmod、Tanh、ReLU等Layer源码分析
- 杭电ACM2004题(成绩转换)-----C语言
- 中文在URL中的编码
- NuPlayer介绍
- hdu 1422 重温世界杯【思维】
- 【JAVA设计模式07】——策略模式
- IOS开源播放器ijkplayer从编译到播放(上)
- Android Studio实现标题栏和状态栏的隐藏
- Leetcode 118. Pascal's Triangle 杨辉三角 解题报告
- 图像算法之九:混合高斯模型GMM
- (转)Julia: 函数手册,有哪些函数你没见过?