2

我必须编辑一个 csv 文件,问题是我的特殊字符,如 ó ã ç 被搞砸了。

这是我的代码的一部分:

static void ReadFromFile(){

        StreamReader SR = new StreamReader("c:\\Users\\Levy\\Documents\\Vale\\Base\\Desknote.csv", Encoding.Default);

        StreamWriter SW = new StreamWriter("c:\\Users\\Levy\\Documents\\Vale\\Base\\Desknote_Ed.csv", true, System.Text.Encoding.GetEncoding("Windows-1252"));

        string S;
        char C='a';
        int i=0;
        S=SR.ReadLine();
        SW.Write(S);

}

更新:

我能够通过在 Stramreader 对象上使用 Encoding.Default 来读取字符。(我可以在控制台上显示它们)

我已经尝试在编写器上使用 ISO 8859-1 和 CP-1252,但我的输出仍然一团糟。

谢谢大家

4

5 回答 5

3

您已将输入文件声明为 ASCII,但显然不是。将其更改为 iso-8859-1 或 CP-1252 (Windows Latin-1) 之类的东西,你可能会有更好的运气......

这并不能解决根本问题,即在 ASCII 中没有 ó ã ç 的等价物,那么您将如何处理它们呢?简单地把它们扔掉?或者您是否应该确保使用更通用的编码(如 UTF-8)来代替您的输出?

最好的办法是从您的源中找出该文件使用的编码是什么,并询问您的文件的接收者什么是可以接受的输出。找出答案的唯一方法是询问,因为表面上看起来相似的各种编码。

于 2009-07-27T17:38:51.100 回答
1

从你所说的:

  1. 您正在设法正确读取数据,也就是说,您对输入文件的编码做出了正确的假设(而不是假设编码是一件好事)。这是因为您已经声明可以将字符串写入控制台并且它与输入匹配。

  2. 当您查看输出文件数据时,它以某种方式不正确。

但是,由于您已正确读取数据,并且您使用的输出编码 (Windows-1252) 实际上支持您所说的字符(还有其他字符吗?),即óãç,那么没有理由不正确写入文件。

那么,您得出输出文件写入不正确结论的方式如何?您用来查看输出的工具是否假设某种编码?

于 2009-07-27T20:10:56.317 回答
1

在这里,有两个地方你可能会搞砸,

  1. 阅读时(这本身就是下一步)
  2. 写的时候

检查源文件编码(您可以尝试Notepad2,它有一个显示编码的状态栏)并在从源文件读取时使用它。

成功读取文件后,使用 UTF-8 写入以将这些字符保留在输出文件中。

于 2009-07-27T17:47:42.533 回答
0

我认为关键真的是编码。输入数据的文本编码是什么?

于 2009-07-27T17:38:38.527 回答
0

如果您读入整个文件并在 \r\n 上拆分会怎样?

于 2009-07-27T17:38:40.430 回答