Microsoft Excel在.csv文件中破坏了音标符号?

207

我通过 PHP 5.2 编程方式将数据导出到 .csv 测试文件中。
例如数据:Numéro 1(请注意重音符号的e)。 数据是 utf-8 格式(没有前置 BOM)。

当我在 MS Excel 中打开此文件时,它显示为 Numéro 1

我能够在文本编辑器(UltraEdit)中打开并正确显示。 UE 报告该字符为 十进制 233

我该如何导出文本数据到 .csv 文件中,以便 MS Excel 能够正确呈现,最好不需要强制使用导入向导或非默认向导设置?


3
选择的工作解决方案是:
  • 包括一个BOM; utf-8
  • 使用此标题:'Content-type: text/plain; charset=utf-8'
这在Excel 2003和Excel 2007上“可行”--其中“可行”=无需导入向导即可打开并正确呈现变音符号。我没有验证是否需要BOM。
- Freddo411
2
需要BOM,我刚刚测试过了。没有它,特殊字符无法正确显示。 - Alex Ciminian
2
希望有人能够更详细地说明如何添加BOM(字节顺序标记)。如果我只是像Response.Write(EF BB BF")这样做,那么这些字符就会出现在文件的开头。 - sydneyos
请查看以下链接: https://dev59.com/BGIk5IYBdhLWcg3wNrq8#20952812 这对我也有效。 - jacob spitzer
看看这个: https://dev59.com/BGIk5IYBdhLWcg3wNrq8#20952812 对我来说非常好用。 - jacob spitzer
显示剩余3条评论
22个回答

0
如果您有像我一样的VB.NET遗留代码,则以下代码适用于我:
    Response.Clear()
    Response.ClearHeaders()
    Response.ContentType = "text/csv"
    Response.Expires = 0
    Response.AddHeader("Content-Disposition", "attachment; filename=export.csv;")
    Using sw As StreamWriter = New StreamWriter(Context.Response.OutputStream, System.Text.Encoding.Unicode)
        sw.Write(csv)
        sw.Close()
    End Using
    Response.End()

-2

使用Notepad++打开csv文件 点击“编码”,选择“转换为UTF-8”(不要选择“转换为UTF-8(无BOM)”) 保存 双击打开Excel 希望这能帮到你 Christophe GRISON


3
这并不回答问题,因为它应该以编程方式完成,而不需要用户手动重新保存每个文件。 - Joe W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接