Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 画笑脸艺术_C# - Fatal编程技术网

C# 画笑脸艺术

C# 画笑脸艺术,c#,C#,这件事太琐碎了,听起来很傻,但请容忍我 我曾经能够通过以下方式绘制ASCII艺术笑脸: Console.Write((char)1); 当我在Windows XP/7上执行此操作时,控制台在默认情况下无法呈现角色。我通过使用这种特殊编码解决了这个编码问题: Console.OutputEncoding = System.Text.Encoding.GetEncoding(1252); 现在,我正在Windows 10中尝试这一点,我得到了一个奇怪的问号字符,它让人想起了最初的编码问题: W

这件事太琐碎了,听起来很傻,但请容忍我

我曾经能够通过以下方式绘制ASCII艺术笑脸:

Console.Write((char)1);
当我在Windows XP/7上执行此操作时,控制台在默认情况下无法呈现角色。我通过使用这种特殊编码解决了这个编码问题:

Console.OutputEncoding = System.Text.Encoding.GetEncoding(1252);
现在,我正在Windows 10中尝试这一点,我得到了一个奇怪的问号字符,它让人想起了最初的编码问题:


Windows 10控制台中是否发生了导致此问题的更改?如何修复它?

这在Windows 10上适用:

public static void Main()
{
    Console.OutputEncoding = System.Text.Encoding.Unicode;
    Console.WriteLine("☺");
}
请注意,
(char)1
仅适用于OEM代码页437。这在DOS应用程序中效果很好,但在Windows上,这种方法要稍微复杂一些,特别是因为U+0001并不代表笑脸。U+263A有。所以正确的方法实际上是:

Console.WriteLine((char)0x263A);
您可能需要将输出编码显式设置为Unicode或UTF-8,以使其显示出来,否则字符会在显示过程中经过一些字符集转换,具体取决于控制台窗口设置:

Console.OutputEncoding = Encoding.Unicode;

尝试使用Unicode字符

char c = '\u263a';
Console.WriteLine (c.ToString());

打开一个控制台,按住Alt键,键入NumPad-1,然后释放Alt键。在Windows 7中,我会得到微笑。你在Windows10中得到了什么?我也得到了微笑。这排除了操作系统的差异。操作系统的差异在于,在Windows 10的控制台中有TrueType字体,在旧版Windows上有光栅字体(强制OEM字符集)。它以前工作的事实只是环境的幸运组合,而不是你做了正确的事情使一个笑脸出现的事实。你为什么要对一个字符施放0x263A?为什么不直接使用
☺"
?@MatthewWatson:因为它可以由任何人输入。因为不管文件编码是什么,它都能保存下来。因为作者也使用了这种格式,而且几乎不需要将与他们的代码的差异扩大到必要的程度。
“\u263A”
会更好,但是我在PowerShell中已经做了足够多的字符代码,我已经准备好了一开始我没想到。