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

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

当我在excel中打开csv时,它将显示所有数据应该如何处理,每个产品一行,缺点是它将不是html实体的字符转换为奇怪的字符。 (spécifications成为sp c cifications)所以excel文件是不是真的可用。

Excel中的CSV

但是,当我在Sublime中打开它时,出于某种原因,所有的数据都被分割成多行。 记事本中同样的故事,当我在C#中读取它。 但! é显示为é而不是é

CSV在崇高

由于我必须parsingHTML中的不同格式(某种types的伪代码),我需要能够以编码语言读取文件。

文件中有19万行,所以我不打算手动重新格式化文件。 有东西告诉我,这与编码使用? (看到网上的某个地方),但我不知道。 我在网上find的大多数“多行csv”问题正好相反。 他们给Excel的解决scheme,不正确地阅读多行。

任何帮助表示赞赏

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

所以你需要告诉Excel它应该以UTF-8格式读取文件。 要做到这一点,使用“数据”/“从文件”function区中的“从文本”导入向导,您可以在导入之前指定文件的编码。

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

由于你的数据包含了,所以我怀疑你来自欧洲(就像我一样),Excel使用分号而不是逗号分隔logging,而在美国则使用逗号(毕竟是逗号分隔值) 。 所以如果你使用非欧洲的CSV工具,你可能需要告诉它使用不同的logging分隔符。 不知道如何在Sublime中做到这一点。

看起来像所有的数据没有问题,与编码。 Excel(忽略编码问题)只是用csv格式解释csv文件。 在崇高加载只是读取一个文本文件,没有进一步尊重格式。

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

你可以用C#读取文件,如下所示:

  1. 阅读一行
  2. 检查它是否在一个未封闭的列数据结束(打开“存在,但没有closures一个,关心逃脱”被转移,不要混淆!)
  3. 阅读并追加新行,直到您真正阅读完整的内容行
  4. 处理内容行(=数据行)
  5. 继续下一个数据行。

对于UTF-8编码,请参阅上面的答案。 希望能帮助到你。