下图解释了所有:
alt text http://img133.imageshack.us/img133/4206/accentar9.png
变量textInput来自File.ReadAllText(path);
,字符如:'éè...不显示。当我运行我的UnitTest时,一切都很好!我看到了他们......为什么?
答案 0 :(得分:3)
.NET类(System.IO.StreamReader
等)将UTF-8作为默认编码。如果要读取不同的编码,则必须将其显式传递给相应的构造函数重载。
另请注意,没有一种称为“ANSI”的编码。你可能指的是Windows代码页1252又名“西欧”。请注意,这与其他国家/地区的Windows默认编码不同。当您尝试使用System.Text.Encoding.Default
时,这是相关的,因为这实际上因系统而异。
/编辑:你似乎误解了我的回答和评论:
所以,最后:您的问题的解决方案应该是以下代码:
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。
答案 1 :(得分:1)
尝试使用chcp命令设置控制台sessin的输出代码页。 Windows支持的代码页是here,here和here。请记住,控制台非常简单:它通过使用代码页来显示将显示的字形来显示UNCICODE或DBCS字符。
答案 2 :(得分:-1)
我不知道为什么它适用于NUnit,但我用NotePad ++打开文件,我看到格式的ANSI。现在我转换为UTF-8并且它可以工作。
我仍然想知道为什么它与NUnit合作而不是在控制台中?但至少它现在有效。
<强>更新强> 我不明白为什么我对这个问题和这个答案投了反对票,因为问题仍然很好,为什么在控制台中我无法读取ANSI文件但在NUNit中我可以?