理想与现实之间

学习的最好方法就是blog

博客园 首页 新随笔 联系 订阅 管理
呼,昨天写程序的时候终于第一次遭遇Encoding了。在以前看"applied microsoft .net framework programming"的时候把讲Encoding的这一段完全的给跳过去了,现在果然遭报应了。 

昨天写的程序的主要功能就把远程的一个网页保存到本地,关键代码很短:

string query = "http://....";
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(query);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string path = "C:\\....";
StreamWriter sw = new StreamWriter(path,false);
sw.Write(sr.ReadToEnd());

然而,保存下来的网页都是乱码(这个是当然的,因为.net默认使用utf-8编码,而那些网页都是GB2312的,请别取笑我..当时我真不知道...) 我当然想到可能是编码的问题,查了下msdn发现StreamReader的构造函数里以Encoding类做为参数的重载版本。然而问题是Encoding类下只有有限的几个编码(utf-16 utf-8 acsii...)没有我要的GB2312。

不得以,只得找出"applied microsoft .net programming"把曾经跳过的那一段重新看了一编,才知道原来要使用Encoding.GetEncoding()方法。把程序改成下面这样就没问题了:

     string query = "http://...";
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(query);
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
     StreamReader sr = new StreamReader(resp.GetResponseStream(),Encoding.GetEncoding("GB2312"));
     string path = "C:\\....";
     StreamWriter sw = new StreamWriter(path,false,Encoding.GetEncoding("GB2312"));

看来,以为用不到的东西而略过去的知识,往往成了拦路虎。
posted on 2004-03-16 20:58  Justin Shen  阅读(2754)  评论(11编辑  收藏  举报