下图解释了所有:

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

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

有帮助吗?

解决方案 3

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

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

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

其他提示

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

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

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

  1. 您的代码中的问题是您需要告诉.NET您正在使用的编码。
  2. 另一句话,说&#8220; ANSI&#8221;可以参考不同的编码,与您的问题没有任何关系。这只是一个&#8220;顺便说一下&#8221;这是为了防止误解(好吧,那个人适得其反)。
  3. 所以,最后:您的问题的解决方案应该是以下代码:

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

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

    然而,这假设您的编码确实是Windows-1252(但我相信这是Notepad ++的意思,&#8220; ANSI&#8221;)。我不知道为什么在NUnit读取时你的文本会正确显示。我想NUnit要么对文本编码有某种自动发现,要么NUnit使用一些奇怪的默认值(即不是UTF-8)。

    哦,顺便说一下:&#8220; ANSI&#8221;真的是指美国国家标准协会&#8220;。有很多完全不同的标准有&#8220; ANSI&#8221;作为他们名字的一部分。例如,C ++(以及其他)也是ANSI标准。

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

尝试使用 chcp 设置您的控制台sessin的输出代码页命令。 Windows支持的代码页是这里此处这里。请记住,控制台非常简单:它通过使用代码页来显示将显示的字形来显示UNCICODE或DBCS字符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top