3

下图说明了一切:

替代文字 http://img133.imageshack.us/img133/4206/accentar9.png

变量 textInput 来自,File.ReadAllText(path);并且像 : ' é è ... 这样的字符不显示。当我运行我的 UnitTest 时,一切都很好!我看到他们...为什么?

4

3 回答 3

3

.NET 类(System.IO.StreamReader等)采用 UTF-8 作为默认编码。如果您想读取不同的编码,则必须将其显式传递给适当的构造函数重载。

另请注意,没有一种称为“ANSI”的编码。您可能指的是 Windows 代码页 1252 又名“西欧”。请注意,这与其他国家/地区的 Windows 默认编码不同。这在您尝试使用时是相关的,System.Text.Encoding.Default因为这实际上因系统而异。

/编辑:您似乎误解了我的回答和我的评论:

  1. 您的代码中的问题是您需要告诉 .NET 您正在使用什么编码。
  2. 另一句话,说“ANSI”可能指的是不同的编码,与您的问题没有任何关系。这只是为了防止误解而说的“顺便说一句”(好吧,这适得其反)。

所以,最后:您的问题的解决方案应该是以下代码:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

这里的重要部分是使用适当的System.Text.Encoding实例。

但是,这假定您的编码确实是 Windows-1252(但我相信这就是 Notepad++ 所指的“ANSI”)。我不知道为什么你的文本在被 NUnit 读取时会正确显示。我想 NUnit 要么对文本编码有某种自动发现,要么 NUnit 使用一些奇怪的默认值(即不是 UTF-8)。

哦,顺便说一句:“ANSI”实际上是指“美国国家标准协会”。有许多完全不同的标准都将“ANSI”作为其名称的一部分。例如,C++(除其他外)也是 ANSI 标准。

仅在某些情况下,它(不精确地)用于指代 Windows 编码。但即使在那里,正如我试图解释的那样,它通常不是指特定的编码,而是指 Windows 用作不同国家/地区默认值的一类编码。其中之一是 Windows-1252。

于 2008-10-18T13:45:50.810 回答
1

Try setting your console sessin's output code page using the chcp command. The code pages supported by windows are here, here, and here. Remember, fundametnaly the console is pretty simple: it displays UNCICODE or DBCS characters by using a code page to dtermine the glyph that will be displayed.

于 2008-10-18T15:44:07.747 回答
-1

我不知道为什么它适用于 NUnit,但我用 NotePad++ 打开文件,我看到了 ANSI 格式。现在我转换为 UTF-8 并且它可以工作。

我仍然想知道为什么它与 NUnit 一起工作而不是在控制台中?但至少它现在有效。

更新 我不明白为什么我对这个问题和这个答案投了反对票,因为这个问题仍然很好,为什么在控制台中我无法读取 ANSI 文件但在 NUUnit 中我可以?

于 2008-10-18T13:24:07.607 回答