在 Excel 中以 CSV 类型保存文件总是会删除 BOM

ric*_*ckp 15 csv unicode localization microsoft-excel

我一直在尝试寻找合理的解决方案/解释(未成功)以找出 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 的另一个已知“错误”/限制吗?

小智 6

对于“为什么 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”解决方法确实有效。我提供了我的见解。