C# : Characters do not display well when in Console, 为什么?

标签 c# .net encoding .net-2.0 io

下图说明一切:

alt text http://img133.imageshack.us/img133/4206/accentar9.png

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

最佳答案

.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。

关于C# : Characters do not display well when in Console, 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/215030/

相关文章:

c# - 如何确保我可以替换目录中的文件?

.net - 使用依赖注入(inject)框架的优秀开源项目?

从 mysql 中选择时,PHP 字符串未转换为 utf 8

java - UTF-8 编码;只有一些日语字符没有被转换

c# - 无法加载 DLL 找不到指定的模块。 (来自 HRESULT : 0x8007007E) 的异常

c# - 找不到类型或命名空间 IAppBuilder(缺少使用指令 pr 程序集引用)

python - JSON 标准 - 和多态性

c# - 无法通过 linq 从 ef 读取数据

c# - Azure 通知中心 templateName 的使用

android - Volley 请求中的 UTF-8 编码