asp.net与asp下的UrlEncode之异

2006年05月26日 2:18 下午  |  分类:Develop

上午在弄yahoo的天气预报
http://weather.cn.yahoo.com/index.html
大家在这个链接中看到的只是当天的天气
在这个链接中看到的是三天的天气,要处理的就是这个页面
http://weather.cn.yahoo.com/area.html?city=城市
直接在浏览器中输入地址返回的结果是正确的
但是
如果直接在程序中去处理形如这样的页面,得到的结果就是错误的
http://weather.cn.yahoo.com/area.html?city=武汉
为什么呢?
就是没有对“武汉”进行url编码
不管是asp还是asp.net中都是用Server.UrlEnCode()来处理
于是在处理过程中很自然的:
Server.UrlEnCode(“武汉”)
但返回的结果还是错误.
试过多次还是一样的错误

会不会是通过UrlEncode后出现问题?
于是在.net环境下单独对”武汉”作了UrlEncode的转换
然后在asp环境下也对“武汉”作了UrlEnCode的转换
结果在这二种环境下产生的字符串完全不同!
为什么会这样?


ASP.net 中的 Server.UrlEncode 默认是按照 UTF-8 编码方式进行处理的。而ASP中是按照本地设置编码方式进行处理的。

知道这个以后就好办了
HttpUtility.UrlEncode(“武汉”,Encoding.Default)
这样就正确了!

天气预报[取自sohu]

2006年05月26日 1:09 下午  |  分类:Develop

本打算”偷”Yahoo的,但后来还是爱上sohu的了
立马就放了上来
大家可以看看效果

http://www.yibin001.com/zh-cn/Weather.html

获取yahoo的天气预报信息

2006年05月25日 6:20 下午  |  分类:Develop

下午弄出来的
准备用到blog上

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

public partial class Default2 : System.Web.UI.Page
{
    protected string _content;
    protected void Page_Load(object sender, EventArgs e)
    {
        GetWebInfo web = new GetWebInfo(new UriBuilder(@"http://weather.cn.yahoo.com/area.html?city=%CE%E4%BA%BA"));

        _content = web.LinkFind();
    }
}
class GetWebInfo
{
    public String filetext;
    public GetWebInfo(UriBuilder url)
    {
        filetext = "";
        HttpWebRequest rs = (HttpWebRequest)WebRequest.Create(url.Uri);
        try
        {
            HttpWebResponse rsp = (HttpWebResponse)rs.GetResponse();

            using (StreamReader reader = new StreamReader(rsp.GetResponseStream(), System.Text.Encoding.Default))
            {
                String tmstr = "";
                while ((tmstr = reader.ReadLine()) != null)
                {
                    filetext += tmstr;
                }
            }
        }
        catch
        {
        }
    }
    public string  LinkFind()
    {
        Regex r;
        Match m;
        string _str = "";
            r = new Regex("<!--3-->\\s*(?<1>.*[^<])<!--3-->",
            RegexOptions.IgnoreCase | RegexOptions.Compiled);
        for (m = r.Match(filetext); m.Success; m = m.NextMatch())
        {
            _str+=m.Groups[1].ToString();
        }
        return _str;
    }
}

.net中实现繁简互换

2006年05月25日 3:06 下午  |  分类:Develop

重写了Stream类
本站就是这样实现的
需要引入Microsoft.VisualBasic;

class CnToTwStream : Stream
{
private Stream _sink;
private MemoryStream _ms;
private Encoding _encoding;</code>

public CnToTwStream(Stream sink, Encoding encoding)
{
_sink = sink;
_ms = new MemoryStream();
_encoding = encoding;
}

public override bool CanRead
{
get { return false; }
}

public override bool CanSeek
{
get { return false; }
}

public override bool CanWrite
{
get { return true; }
}

public override long Length
{
get { return _ms.Length; }
}

public override long Position
{
get { return _ms.Position; }
set { throw new NotSupportedException(); }
}

public override int Read(byte[] buffer, int offset, int count)
{
throw new NotSupportedException();
}

public override long Seek(long offset, System.IO.SeekOrigin direction)
{
throw new NotSupportedException();
}

public override void SetLength(long length)
{
throw new NotSupportedException();
}

public override void Close()
{
_ms.Close();
byte[] buffer_cn = _ms.GetBuffer();
string str_cn = _encoding.GetString(buffer_cn);
string str_tw = Strings.StrConv(str_cn, VbStrConv.TraditionalChinese, 0);
byte[] buffer_tw = _encoding.GetBytes(str_tw);
using (_sink)
{
_sink.Write(buffer_tw, 0, buffer_tw.Length);
}
}

public override void Flush()
{
_ms.Flush();
}

public override void Write(byte[] buffer, int offset, int count)
{
_ms.Write(buffer, offset, count);
}
}