在 Excel 中以 CSV 类型保存文件始终会删除 BOM

在 Excel 中以 CSV 类型保存文件始终会删除 BOM

我一直在尝试寻找一个合理的解决方案/解释(但没有成功)来找出为什么 Excel 在将文件保存为 CSV 类型时默认删除 BOM。

如果您发现此内容重复,请原谅问题。这可以读取非 ASCII 编码的 CSV 文件,但不包括将文件保存回来(这是最大的问题所在)。

这是我目前的情况(我认为这种情况在处理 Unicode 字符和 CSV 格式的本地化软件中很常见):

  • 我们使用 UTF-16LE 将数据导出为 CSV 格式,确保设置了 BOM (0xFFFE)。文件生成后,我们会使用十六进制编辑器进行验证,以确保设置正确。

  • 在 Excel 中打开该文件(在此示例中,我们导出日文字符)并确认 Excel 使用正确的编码加载该文件。

  • 尝试保存此文件时,系统会提示一条警告消息,表明该文件可能包含与 Unicode 编码不兼容的功能,但会询问您是否仍要保存。

  • 如果您选择另存为对话框,它会立即要求您将文件另存为“Unicode 文本”而不​​是 CSV。如果您选择“CSV”扩展名并保存文件,它会删除 BOM(显然还会删除所有日文字符)。

为什么会发生这种情况? 这个问题有解决方案吗?或者这是 Excel 的一个已知“错误”/限制?

此外(作为一个附带问题),Excel 在加载 UTF-16LE 编码的 CSV 文件时似乎只使用 TAB 分隔符。同样,这是 Excel 的另一个已知“错误”/限制吗?

答案1

对于“Excel 为什么会做 X?”这样的问题,没有礼貌的答案。

为什么不采用“另存为 Unicode 文本”作为标准传输格式?Excel 另存为确保有 BOM,使用 TAB 作为分隔符,像 CSV 一样引用字段...

顺便说一句,您不需要“选择 CSV 扩展名”。您有两个选择——格式和扩展名。尝试在“保存类型”框中保存为 unicode 文本,并在“文件名”框中手动将扩展名更改为 csv。然后退出 Excel 并在 Windows 资源管理器中双击文件名。打开正常。试试看。

更新以讨论 OP 的评论

  • “另存为 Unicode 文本”(在 Excel 2007 中)将始终将您的文件保存为文本扩展名(我不能代表以前或较新的版本)。这就是“另存为类型”的想法...

=> 请仔细阅读我上面写的内容并亲自尝试。它将始终使用 TXT 扩展名保存您的文件除非你覆盖了:删除txt‘文件名’框中的并输入csv

  • 澄清一下,您的“Excel 另存为确保有 BOM”是不正确的。

=> “另存为Unicode 文本“确保文件前面有一个UTF-16LE BOM。尝试一下看看。

  • 这就是我首先提出问题的原因!如果我打开一个包含 BOM 的 CSV 格式文件,以表明我的文件编码是 UFT-16LE,并通过 Excel 修改此文件,我希望当我保存此文件时,编码保持不变...

=> 并且您的期望没有得到满足,因为 Excel 不会保留有关输入 CSV 文件的任何信息。没有办法强迫它做您想做的事情。所以你要么放弃,要么尝试其他方法,就像我建议的那样。

  • 如果有人曾经遇到过这些问题,请提供您的见解,那就太好了。

=> 几年前,我遇到过这些问题,涉及中文数据和 Excel 1997。在回答您的问题之前,我已经使用 Excel 2003 和 Excel 2007 验证过 Excel 仍然表现不佳。我已经验证过“另存为类型 = Unicode 文本,扩展名 = CSV”解决方法确实有效。我提供了我的见解。

相关内容