新浪天气API:http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0
我用C#的Uri类编码北京,结果是:%E5%8C%97%E4%BA%AC
问题是新浪的是 %B1%B1%BE%A9。 纠结了,新浪的是怎么弄的?
我用 百度搜索的 编码 应用 才明白:
新浪使用GB2312把北京编码成:%B1%B1%BE%A9
而C#是把北京编码成:%E5%8C%97%E4%BA%AC
这是全部代码: getGB2312就是获取编码的
WebClient.Encoding = System.Text.Encoding.UTF8;
string uri = "http://php.weather.sina.com.cn/xml.php?city=" + getGB2312(key) + "&password=DJOYnieT8234jlsK&day=0";
string val = WebClient.DownloadString(uri);
string text = "北京今天," + GetString(val, "<status1>", "</status1>") + ","
+ GetString(val, "<direction1>", "</direction1>") + ",温度在" + GetString(val, "<temperature1>", "</temperature1>")
+ "°到" + GetString(val, "<temperature2>", "</temperature2>") + "°之间.";
抱歉,忘记问题了,我的问题就是,,string getGB2312(string key)方法该如何实现
抱歉,少了个方法:
public string GetString(string a, string b, string c)
{
int start = a.IndexOf(b) + b.Length;
int end = a.IndexOf(c, start);
return a.Substring(start, end - start);
}
C#是用的UTF8吧? 你改成gb2312试试
抱歉,忘记问题了,我的问题就是,,string getGB2312(string key)方法该如何实现
System.Text.Encoding.GetEncoding("gb2312")
@tomcat1988: 完整的,并且你复制楼主的代码,经过测试的。有效地。
@蓝多: 你也太懒了吧 !!System.Web.HttpUtility.UrlEncode("北京", System.Text.Encoding.GetEncoding("gb2312"))
@tomcat1988: - -,这么简单啊。 原来编码的方法就可以设定指定的编码格式。 我一直都是先转成 GB2312的文本再URI编码。 每次都是失败。
@蓝多: 呵呵 你平时多注意下重载的方法
有时就是这么简单