我一直在尝试寻找一个合理的解决方案/解释(但没有成功)来找出为什么 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”解决方法确实有效。我提供了我的见解。