字体是对的.为什么我不能在这个C#控制台应用程序中显示此unicode字符?

bar*_*lop 3 .net c# unicode console-application

我在cmd中添加了一种字体.(DejaVu Sans Mono)这个 techrepublic链接有一个注册表黑客为cmd添加一个字体,人们可以为某些字体做这样的.

该字体有一个unicode非ascii字形,我可以将该unicode非ascii字形粘贴到cmd提示符中

但我从stdin读取的C#程序没有输出它

在此输入图像描述

在此输入图像描述

在此输入图像描述

这是我的C#程序及其输出

我的程序从stdin中读取一行并写入.

问题在于,当它写入时,它会写一个问号

该计划甚至有这条线

Console.OutputEncoding = System.Text.Encoding.Unicode;

但即使是那条线也没有让它输出角色

C:\blah>echo ?
?

C:\blah>type b1.cs
using System;
class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = System.Text.Encoding.Unicode;
        string s;
        s = Console.ReadLine();
        Console.WriteLine(s);

    }
}
C:\blah>b1
?
?

C:\blah>
Run Code Online (Sandbox Code Playgroud)

我知道自己很好,因为more有同样的问题..但是echo可以做到,所以我应该能让我的程序做到这一点

C:\blah>echo ?
?

C:\blah>more
?
?

^C
C:\blah>
Run Code Online (Sandbox Code Playgroud)

添加截图re cyril的评论

在此输入图像描述

添加截图重新评论

带有一行Console.WriteLine("?") 写入的AC#程序 ? 保存为unicode以保留该字符,并进行编译.但鉴于它打印了一个?,似乎腐败发生在输出上.我不能评论腐败是否也发生在stdin上.但看起来它出现在输出上.

小智 5

您还需要设置输入编码.

Console.InputEncoding = System.Text.Encoding.Unicode;
Run Code Online (Sandbox Code Playgroud)

更新!

using System;
class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = System.Text.Encoding.Unicode;
        Console.InputEncoding = System.Text.Encoding.Unicode;
        string s;
        s = Console.ReadLine();
        Console.WriteLine(s);

    }
}
Run Code Online (Sandbox Code Playgroud)