我终于在writing special characters (0x80...0x9F) to the Windows console的帮助下解决了David的问题:
现在我希望能够读回包含0x80-0x9F范围内的特殊字符的文本(使用Windows 1252编码),例如EURO标志(€):
string text = System.Console.ReadLine ();
每当我输入一个特殊字符时,返回null
。我天真地尝试将InputEncoding
设置为UTF8:
System.Console.InputEncoding = System.Text.Encoding.UTF8;
但这没有帮助。
答案 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的字体。