using System.Text;
using System.IO;
namespace Farproc.Text
{
/// <summary>
/// 用于取得一个文本文件的编码方式(Encoding)。
/// </summary>
public class TxtFileEncoding
{
public TxtFileEncoding()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 取得一个文本文件的编码方式。如果无法在文件头部找到有效的前导符,Encoding.Default将被返回。
/// </summary>
/// <param name="fileName"> 文件名。 </param>
/// <returns></returns>
public static Encoding GetEncoding( string fileName)
{
return GetEncoding(fileName, Encoding.Default);
}
/// <summary>
/// 取得一个文本文件流的编码方式。
/// </summary>
/// <param name="stream"> 文本文件流。 </param>
/// <returns></returns>
public static Encoding GetEncoding(FileStream stream)
{
return GetEncoding(stream, Encoding.Default);
}
/// <summary>
/// 取得一个文本文件的编码方式。
/// </summary>
/// <param name="fileName"> 文件名。 </param>
/// <param name="defaultEncoding"> 默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。 </param>
/// <returns></returns>
public static Encoding GetEncoding( string fileName, Encoding defaultEncoding)
{
FileStream fs = new FileStream(fileName, FileMode.Open);
Encoding targetEncoding = GetEncoding(fs, defaultEncoding);
fs.Close();
return targetEncoding;
}
/// <summary>
/// 取得一个文本文件流的编码方式。
/// </summary>
/// <param name="stream"> 文本文件流。 </param>
/// <param name="defaultEncoding"> 默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。 </param>
/// <returns></returns>
public static Encoding GetEncoding(FileStream stream, Encoding defaultEncoding)
{
Encoding targetEncoding = defaultEncoding;
if (stream != null && stream.Length >= 2 )
{
// 保存文件流的前4个字节
byte byte1 = 0 ;
byte byte2 = 0 ;
byte byte3 = 0 ;
byte byte4 = 0 ;
// 保存当前Seek位置
long origPos = stream.Seek( 0 , SeekOrigin.Begin);
stream.Seek( 0 , SeekOrigin.Begin);
int nByte = stream.ReadByte();
byte1 = Convert.ToByte(nByte);
byte2 = Convert.ToByte(stream.ReadByte());
if (stream.Length >= 3 )
{
byte3 = Convert.ToByte(stream.ReadByte());
}
if (stream.Length >= 4 )
{
byte4 = Convert.ToByte(stream.ReadByte());
}
// 根据文件流的前4个字节判断Encoding
// Unicode {0xFF, 0xFE};
// BE-Unicode {0xFE, 0xFF};
// UTF8 = {0xEF, 0xBB, 0xBF};
if (byte1 == 0xFE && byte2 == 0xFF ) // UnicodeBe
{
targetEncoding = Encoding.BigEndianUnicode;
}
if (byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF ) // Unicode
{
targetEncoding = Encoding.Unicode;
}
if (byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF ) // UTF8
{
targetEncoding = Encoding.UTF8;
}
// 恢复Seek位置
stream.Seek(origPos, SeekOrigin.Begin);
}
return targetEncoding;
}
}
using Farproc.Text;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main( string [] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
string fileName = @" e:\a.txt " ;
// 生成一个big endian Unicode编码格式的文本文件
StreamWriter sw = new StreamWriter(fileName, false , Encoding.BigEndianUnicode); // 你可以试试其他编码,比如Encoding.GetEncoding("GB2312")或UTF8
sw.Write( " 这是一个String " );
sw.Close();
// 读取
Encoding fileEncoding = TxtFileEncoding.GetEncoding(fileName, Encoding.GetEncoding( " GB2312 " )); // 取得这txt文件的编码
Console.WriteLine( " 这个文本文件的编码为: " + fileEncoding.EncodingName);
StreamReader sr = new StreamReader(fileName, fileEncoding); // 用该编码创建StreamReader
// 用下面的方法虽然可以让系统自动判断文本文件的编码格式,但是我们无法取得该文本文件的编码
// sr.CurrentEncoding永远为 Unicode(UTF-8)
// StreamReader sr = new StreamReader(fileName, true);
// Console.WriteLine("这个文本文件的编码为:" + sr.CurrentEncoding.EncodingName);
Console.WriteLine( " 这个文本文件的内容为: " + sr.ReadToEnd());
sr.Close();
Console.ReadLine();
}
}
}
你先将你导出的东西生成一个txt文件,然后在按钮中加入以下代码
FileName为你导出的txt文件的全路径
FileInfo file = new FileInfo(FileName);//用于获得文件信息
Response.Clear();//清空输出
Response.Charset = "GB2312";//设定编码
Response.ContentEncoding = System.Text.Encoding.UTF8;
// 添加头信息,为"文件下载/另存为"对话框指定默认文件名
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(FileName));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", file.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-txt";
// 把文件流发送到客户端
Response.WriteFile(file.FullName);