日期:2014-05-18  浏览次数:23258 次

HttpContext.Current.Response.Write输出内容到word会乱码
大家都知道,word和html可以互相转换的.就是基于这个思想,我们可以把组织好的html代码输出到word中,即不用启动word进程也因此没有关闭进程的责任,此外还不受组件版本的限制,以及word版本的限制(至少我知道WORD2000 - WORD2007都可以)
可现在的问题,一旦我在HttpContext.Current.Response.Write该方法输出的html代码过长,则生成的word文件中所有的非英文字符全部变成乱码(看起来更像是韩文),把这些字符解析后发现,他们的二进制码的确变了.
C# code

public static void PrintToClient(string strFileContent, string strFileName, string extendName)
    {
        /*过滤掉windows下文件名称中的非法字符*/
        Regex reg = new Regex(@"[\\,/,:,\*,\?,<,>,\|]{1,}|" + "\"{1,}");
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.Buffer = true;
        HttpContext.Current.Response.Charset = "GB2312";  //设置了类型为中文防止乱码的出现 
        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlPathEncode(reg.Replace(strFileName, "") + extendName));
        HttpContext.Current.Response.ContentType = "application/ms-word;charset=GB2312";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); //设置输出流为简体中文
        HttpContext.Current.Response.Write(strFileContent);
        HttpContext.Current.Response.End();
    }


跟踪的时候发现在write之前strFileContent字符串中的html代码一切正常,只是在输出到文件的时候乱掉了.现在可以肯定的是html代码过长.不知道哪位兄弟把原理和HttpContext.Current.Response.Write详细解说一下.网上找了,MSDN中也解释的及其简单,简单到了看不看无所谓的底部.谢谢拉.各位元旦快乐,回来后结帖

------解决方案--------------------
GB2312 改为UTF-8试试
------解决方案--------------------
Response.Charset = "GB2312"; //设置字符集类型
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
//追加响应的头部信息,即文件名.
Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8).ToString());
------解决方案--------------------
编码问题!多试几种编码!