CSV在Excel中的行为与Sublime / C#

时间:2015-12-02 14:02:26

标签: c# excel csv multiline

我有一个.csv文件来自我们正在更新到完全重新设计的网站的网站。该网站将在PHP中重写,我们需要保留旧数据。

当我在excel中打开csv时,它会显示所有数据应该如何,每个产品一行,其缺点是它将非html实体的字符转换为奇怪的字符。 (spécifications变成了spécifications)因此excel文件实际上并不可用。

CSV in Excel

然而,当我在Sublime中打开它时,由于某种原因,所有数据都被分成多行。记事本中的相同故事以及当我在C#中阅读时。但! é确实显示为é而不是é

CSV in sublime

由于我必须将HTML解析为不同的格式(某种伪代码),我需要能够以编码语言读取文件。

文件中有190k行,所以我不打算手动重新格式化文件。有什么东西告诉我它与使用的编码有关吗? (看到网上的某个地方),但我不确定。我在网上找到的大多数“多线csv”问题恰恰相反。他们为excel提供解决方案,而不是正确读取多线。

感谢任何帮助

2 个答案:

答案 0 :(得分:2)

字母é被编码为UTF-8中的字节序列0xC3 0xA9。显然你的文件是UTF-8编码的。 Excel希望CSV文件通常在Windows-1252中编码(除非存在BOM (Byte Order Mark))。

因此,您需要告诉Excel它应该将文件读取为UTF-8。要执行此操作,请使用“数据”/“从文件”功能区中的“发件人文本”导入向导,您可以在导入前指定文件的编码。

小心选择正确的分隔符,这可能解释了问题的第二部分:

由于您的数据包含é,我怀疑您是来自欧洲(我),其中Excel使用分号而不是逗号来分隔记录,而在美国,使用逗号(它们是“逗号 - ”毕竟分开的价值“。因此,如果您使用非欧洲CSV工具,则可能需要告诉它使用不同的记录分隔符。不知道如何在Sublime中专门做这件事。

答案 1 :(得分:1)

似乎所有数据都很好,编码也没有问题。 Excel(忽略编码问题)只是用csv格式解释csv文件。加载sublime只是阅读文本文件,而不需要进一步尊重格式。

如果要在C#中读取文件,则必须自己在输入文件上应用csv格式。您的csv文件定义了一行列。每个列值包含在“,将列分隔成一行; 在多行中溢出溢出应该是在列数据中包含换行符的效果。

您可以通过以下内容在C#中读取文件:

  1. 阅读一行
  2. 检查它是否在未封闭的列数据中结束 (打开“现在,但没有关闭,照顾逃脱”到 不要迷茫,不要混淆!)
  3. 阅读并添加新行 直到你真正阅读完整的内容行
  4. 处理内容行(=数据行)
  5. 继续下一个数据行。
  6. 对于UTF-8编码,请参阅上面的答案。 希望它有所帮助。