【问题标题】:ASP.NET CSV Excel issue with strange characters带有奇怪字符的 ASP.NET CSV Excel 问题
【发布时间】:2010-03-15 18:46:10
【问题描述】:

我正在将数据表导出为 CSV 格式,例如:

    "COL1","COL2","COL3"
    "1","some text", "£232.00"
    "2","some more text", "£111.00"
    "3","other text", "£2.00"

使用 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()

我的问题是当 Excel 尝试打开导出的文件时,字符  出现在所有 £ 符号之前,例如£232.00 当值应该是£232.00

【问题讨论】:

  • 这看起来像是 Unicode 到 UTF-8 的转换错误。不过,我不知道如何解决它。

标签: c# vb.net csv export-to-excel


【解决方案1】:

您需要设置编码,即Response.ContentEncoding 属性。

最终在 Reflector 中查找后,默认的 ContentEncoding 可能是 Encoding.DefaultEncoding.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 更改之前出现以进行刷新。
  • 这是基于来自 .NET Framework 2.0 的 System.Web 的 Reflector 6 输出。

【讨论】:

  • 感谢解决它的提示“context.Response.ContentEncoding = System.Text.Encoding.Unicode”
  • 我通过添加Response.ContentEncoding = Encoding.Default; 解决了这个问题。不太清楚为什么说实话
【解决方案2】:

这对我有用 - 其他人没有

Response.ContentEncoding = System.Text.Encoding.Default

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2022-01-18
    • 2018-07-16
    相关资源
    最近更新 更多