问题一:
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也可以。
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等都没办法正确显示。各位有没有碰到这个问题
我已经在html页面中加入了meta标签分别采用了utf-8和GB2312都不管用,
从html页面读出来的中文都是"????????"
请教高手?
string s = reader.ReadToEnd();
reader.Close();
StreamReader reader = new StreamReader(YourStream, System.Text.Encoding.GetEncoding("GB2312"));
string s = reader.ReadToEnd();