我的原始 csv 文件是用 UTF8-BOM 编码的,这样 Excel 才能识别 Unicode 字符(如果它只是用 UTF8 编码,那么 Excel 就无法识别 unicode 字符)。
我的问题是,对于 UTF8 编码的 CSV 文件,当您在 Excel 中单击“保存”时,它会弹出一个选项来保留原始格式。但是,如果文件是 UTF8-BOM 编码的,则单击“保存”是即时的,并且没有保留格式的选项。然后,CSV 文件的逗号被制表符替换。
答案1
实际情况如下:
- Excel 会查看系统的区域设置,以查找配置的列表分隔符,在本例中为逗号。这里需要指出的是,CSV并不是一个单一的、定义明确的格式。任何可以使用分隔符......(编辑:嗯,实际上指导方针将分隔符固定为逗号,但这不是具有约束力的标准,并且在实践中并未严格遵循该指南。)
- 然后,Excel 将内存中的数据转换为 XLSX 文件。您可以按照 Excel 的方式进行操作。请记住,这实际上是文件类型转换,Excel 不会记住源文件采用的编码或使用的分隔符。
- 您进行更改,然后单击“保存”。此时,Excel 不再具有 CSV 文件,而是 XLSX 文件,需要将其转换回“类似 CSV”的文件。由于它知道编码需要为带 BOM 的 UTF-8,因此它决定另存为“Unicode 文本”(它这样做时没有明确提及这一点)。在这种格式中,他们使用带 BOM 的 UCS-2 LE 作为编码,并使用制表符作为分隔符。这不是您想到的 CSV 标准,也不是您的原始文件格式化的标准。这很奇怪,违反直觉,但严格来说并没有错。
那么,你能做什么呢?
理论上,你应该能够使用另存为 CSV 选项,并通过工具->“Web 选项”菜单(在另存为对话框中)将编码设置为 UTF-8。这里唯一的问题是,这似乎不能正常工作。我猜这是一个有问题的功能。有关此内容的更多信息,请访问 Stack Overflow: 使用 UTF-8 编码将 Excel 转换为 CSV
那么,你能做什么真的怎么做?
只需使用 UTF-8 BOM,使用保存,然后打开生成的 CSV 文件,将所有制表符替换为逗号。
那又怎样应该你真的会吗?
不要使用 Excel 加载和编辑 CSV 文件。或者至少要更加小心...
为什么不呢?
我写了一篇(太长了)关于它的文章在这里。