use*_*345 4 c# vb.net csv export-to-excel
我正在将数据表导出为CSV格式,例如:
"COL1","COL2","COL3"
"1","some text", "£232.00"
"2","some more text", "£111.00"
"3","other text", "£2.00"
Run Code Online (Sandbox Code Playgroud)
使用ashx处理程序导出的代码非常简单:
context.Response.Clear()
context.Response.ContentType = "text/csv"
context.Response.AddHeader("Content-disposition", "attachment;filename=data.csv")
context.Response.AddHeader("Cache-Control", "must-revalidate")
context.Response.AddHeader("Pragma", "must-revalidate")
context.Response.Write(data)
context.Response.Flush()
context.Response.End()
Run Code Online (Sandbox Code Playgroud)
我的问题是当Excel尝试打开导出的文件时,角色Â出现在所有£符号之前,例如£232.00值应该是£232.00.
您需要设置编码即Response.ContentEncoding属性.
最后在Reflector中查找之后,默认情况ContentEncoding可能是Encoding.Default或者Encoding.UTF8,如果system.web/globalization存在配置节,则除非它被responseEncoding该配置节中的属性覆盖.
至于设置ContentEncoding属性是否完全不同于不这样做:
HttpWriter.UpdateResponseEncoding,HttpWriter.FlushCharBuffer在切换到新编码之前调用,如果有任何缓冲要写入的话.ContentEncoding它被设置为我在上面提到的默认值,首先引用HttpWriter.UpdateResponseEncoding,在写入任何内容之前肯定会调用它,因为HttpWriter._responseEncodingUpdated在写入方法中检查并且仅True在结束时更新HttpWriter.UpdateResponseEncoding.因此,我认为OP需要更改编码Unicode,我认为Phil Hale的评论意味着他有一个system.web/globalization需要覆盖的配置部分.
笔记:
Response.Clear仅影响内容,而不是标题,那么,违背了我以前的建议,我不认为这是相关的,除了删除现有内容的任何机会存在于之前被刷新ContentEncoding的变化.System.Web.NET Framework 2.0 的Reflector 6输出.| 归档时间: |
|
| 查看次数: |
3592 次 |
| 最近记录: |