C#:在Console中字符不能很好地显示,为什么?
题
下图解释了所有:
替代文字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
时,这是相关的,因为这实际上因系统而异。
/编辑:你似乎误解了我的回答和评论:
- 您的代码中的问题是您需要告诉.NET您正在使用的编码。
- 另一句话,说&#8220; ANSI&#8221;可以参考不同的编码,与您的问题没有任何关系。这只是一个&#8220;顺便说一下&#8221;这是为了防止误解(好吧,那个人适得其反)。 醇>
所以,最后:您的问题的解决方案应该是以下代码:
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。