文件名乱码问题 : 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、完成。