大家都知道,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());
------解决方案--------------------------------------------------------
编码问题!多试几种编码!