Response.Filter实现繁简转换

本文介绍了一种解决ASP.NET应用程序中文件名乱码的方法,通过自定义ResponseFilter类实现字符集转换,并在Global.Application_BeginRequest事件中设置响应过滤器。
http://www.1task.cn/blog/article/60.aspx
文件名乱码问题 : http://www.1task.cn/blog/article/5.aspx
using System;
using System.IO;
using System.Text;

namespace  Sample
{
 public class ResponseFilter : Stream
 {
  private Stream m_sink;
  private long m_position;

  public ResponseFilter(Stream sink)
  {
   m_sink = sink;
  }

  // The following members of Stream must be overriden.
  public override bool CanRead
  {get { return true; }}

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

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

  public override long Length
  {get { return 0; }}

  public override long Position
  {
   get { return m_position; }
   set { m_position = value; }
  }

  public override long Seek(long offset, System.IO.SeekOrigin direction)
  {
   return 0;
  }

  public override void SetLength(long length)
  {
   m_sink.SetLength(length);
  }

  public override void Close()
  {
   m_sink.Close();
  }

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

  public override int Read(byte[] buffer, int offset, int count)
  {
   return m_sink.Read(buffer, offset, count);
  }

  // Override the Write method to filter Response to a file.
  public override void Write(byte[] buffer, int offset, int count)
  {
   string s = Microsoft.VisualBasic.Strings.StrConv(
    Encoding.GetEncoding("GB2312")..GetString(buffer),
    Microsoft.VisualBasic.VbStrConv.TraditionalChinese,0
    );
   byte[] b = Encoding.GetEncoding("BIG5").GetBytes(s);
   m_sink.Write(b, 0, count);

  }
 }
}

2、在Global.Application_BeginRequest使用Filter
this.Response.Charset = "BIG5";
this.Response.Buffer = false;
this.Response.Filter = new ResponseFilter(Response.Filter);

3、完成。

转载于:https://www.cnblogs.com/winnerlan/archive/2008/05/22/1204624.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值