如何从C#中的Windows控制台读取特殊字符(0x80 ... 0x9F)?

时间:2011-10-29 14:54:27

标签: c# character-encoding console windows-console

我终于在writing special characters (0x80...0x9F) to the Windows console的帮助下解决了David的问题:

  1. 输出编码必须设置为UTF-8。
  2. 控制台使用的字体应该类似于Consolas。
  3. 现在我希望能够读回包含0x80-0x9F范围内的特殊字符的文本(使用Windows 1252编码),例如EURO标志(€):

    string text = System.Console.ReadLine ();
    
    每当我输入一个特殊字符时,

    返回null。我天真地尝试将InputEncoding设置为UTF8:

    System.Console.InputEncoding = System.Text.Encoding.UTF8;
    

    但这没有帮助。

2 个答案:

答案 0 :(得分:3)

您可以设置控制台应用程序的输入代码页以读取这些特殊字符。 有一个名为SetConsoleCP的Win32 api来设置输入代码页。在以下示例中,我使用Windows-1252代码页:

[DllImport("kernel32.dll")]
private static extern bool SetConsoleCP(uint wCodePageID);

static void Main(string[] args)
{
  SetConsoleCP((uint)1252);
  Console.OutputEncoding = Encoding.UTF8;
  System.Console.Out.WriteLine("œil"); 

  string euro = Console.In.ReadLine();

  Console.Out.WriteLine(euro);
}

修改

AS L.B.建议您也可以使用Console.InputEncoding = Encoding.GetEncoding(1252)。

这是没有互操作的完整示例(注意,您也可以使用Windows-1252代码页进行输出编码:

static void Main(string[] args)
{
  Console.InputEncoding  = Encoding.GetEncoding(1252);
  Console.OutputEncoding = Encoding.GetEncoding(1252);
  System.Console.Out.WriteLine("œil"); 

  string euro = Console.In.ReadLine();

  Console.Out.WriteLine(euro);
}

结束编辑

希望,这有帮助。

答案 1 :(得分:-3)

欧元符号(€):Unicode 0x20ac也是UTF-8字节序列0xE2 0x82 0xAC。 不是0x80-0x9F的范围。

char Euro = Convert.ToChar(0x20ac);
Console.WriteLine(Euro);
Console.WriteLine(Convert.ToChar(0x80));

命令行输入此

>csc sample.cs
>chcp 65001

命令行窗口中的字体更改TrueTypeFont(“Consoleas”或“Lucida Console”选择)propaty(字体选项卡)

>sample
€
?

(?:用方括号)。 charactor代码检查字体调色板情况0x80-0x9F.It尚未分配启用Unicode的字体。