您的位置:首页 > 其它

URL Encoding/Decoding

2008-12-09 22:18 274 查看
问题一:

WebClient   wc   =   new   WebClient();    
                  wc.Credentials   =   CredentialCache.DefaultCredentials;    
                  Byte[]   pageData   =   wc.DownloadData(@url);    
  当   url   包含中文字符的时候   就出现乱码问题?怎么解决?  
  编码    
  Response.ContentEncoding   =   System.Text.Encoding.GetEncoding("GB2312");    
  或者   utf-8    
  都不能解决问题~~~~~~~    
  url不包含中文的时候     是正常的    
  比如   url="search.aspx?search_str=aa"    
  正常    
  但是   url="search.aspx?search_str=中国"    
  就不正常了  
  WebRequest   也出同样的问题

 

 

答案:

 来自:http://renyu732.cnblogs.com/archive/2005/06/09/171175.html

 

论坛中经常会看到有人问,在URL传递中文时会出现传递不全的情况,解决方案如下:
修改web.config文件中的utf-8改为gb2312
然后传递的时候这样写:
url="description.aspx?name="+Server.UrlEncode(myname.text)
response.redirect(url)

接收的时候:
name=Server.UrlDecode(Request.QueryString("name"))


//按照UTF-8进行编码


string tempSearchString1 = System.Web.HttpUtility.UrlEncode("C#中国");


//按照GB2312进行编码


string tempSearchString2 = System.Web.HttpUtility.UrlEncode("C#中国",System.Text.Encoding.GetEncoding("GB2312"));

另外给二个说明及案例地址:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemwebhttpserverutilityclassurlencodetopic1.asp

http://dotnet.aspx.cc/ShowDetail.aspx?id=YUEMA9OS-W1DN-4KIS-8RIE-S742LLJ91L6Q

 

 

 

 

问题二:  在c# winform 模式下,我想使用HttpUtility.UrlEncode,如何引用 System.web?

 

我在c#   winform   模式下   输入   using   System.Web,  
  编译时提示   “E:/c#/cie1/Form1.cs(11):   类型或命名空间名称“Web”在类或命名空间“System”中不存在(是否缺少程序集引用?)”  
  请问应该如何引用   System.Web才能使用HttpUtility.UrlEncode?

答:

在项目管理器的列表中有引用,点右键,"添加引用",选择System.Web.dll。(就是system.web)

 

 

 

 

问题三:下边是实际使用的例子。 我搜索http://www.baidu.com也可以。

问题:WebClient的发的uri的中文问题?
WebClient web_client = new WebClient();

Byte[] page_in_bytes=web_client.DownloadData("http://198.198.8.9/1.jsp?name='年岁对方'");

//这是会提示出错,当改成
string page="http://198.198.8.9/1.jsp?name='年岁对方'";
Byte[] gb =System.Text.Encoding.Unicode.GetBytes(page);
page=Encoding.Unicode.GetString(gb);
Byte[] page_in_bytes = web_client.DownloadData(page);

//就可以成功提交,但1.jsp接收到的name是乱码,转成GB2312或ISO等都没办法正确显示。各位有没有碰到这个问题
 
 
答:
Byte[] page_in_bytes=web_client.DownloadData("http://198.198.8.9/1.jsp?name='" + System.Web.HttpUtility.UrlEncode("年岁对方", System.Text.Encoding.GetEncoding("GB2312")) +"'");
 
 
 
 
问题四:
使用c#的流来读html代码   中文乱码如何解决呢  
  我已经在html页面中加入了meta标签分别采用了utf-8和GB2312都不管用,  
  从html页面读出来的中文都是"????????"  
  请教高手?
 
答:
 StreamReader   reader   =   new   StreamReader(YourStream,   System.Text.Encoding.GetEncoding("GB2312"));  
  string   s   =   reader.ReadToEnd();  
  reader.Close();  
 
 
StreamReader默认是UTF-8读取文件,如果文件中有中文,则可以指定后面编码格式为GB2312,或者对应的需要的格式..  
   
  StreamReader   reader   =   new   StreamReader(YourStream,   System.Text.Encoding.GetEncoding("GB2312"));  
  string   s   =   reader.ReadToEnd();
 
 
 
有位仁兄也发现了这个问题:
http://blog.csdn.net/qshpeng/archive/2007/03/26/1541980.aspx

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: