我有一个C#控制台应用程序,我试图在其中做一些ASCII艺术。但是,我想要使用的一些字符是Unicode。所以,我正在搜索互联网/ SO,并且找不到关于如何在C#控制台应用程序中将控制台设置为Unicode的综合答案。
TDLR:如何将C#控制台应用程序中的控制台设置为Unicode? strong>
编辑:我在搜索与此问题无关的内容后确实找到this post。
答案 0 :(得分:10)
事实证明,为了使控制台显示Unicode字符,您需要设置多项内容。
Console.ReadKey();
运行一次C#控制台应用程序,以使窗口保持打开状态。右键单击窗口的标题栏,然后选择属性。通过Visual Studio进行调试时,这些选项将保持不变。 您可能需要使用“默认”菜单来保留整个系统中的选项。在字体选项卡中,您需要将字体设置为Lucida Console
。此字体支持Unicode字符。相关帖子可以找到here。 将控制台的代码页设置为UTF-8。这个有点棘手。因为,您必须在控制台窗口中执行命令才能更改代码页。无论出于何种原因,此选项不可用作控制台首选项。为此,您需要创建一个单独的cmd.exe
进程,并使用它来代替提供的普通控制台。
var cmd = new Process
{
StartInfo =
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardOutput = true,
CreateNoWindow = true,
UseShellExecute = false
}
};
cmd.Start();
cmd.StandardInput.WriteLine("chcp 65001");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
上面代码的第一部分将创建一个新的cmd.exe
进程。为 StartInfo 提供的设置将确保将Console
重定向到此新进程。代码的第二部分向该控制台窗口发送命令并运行它。该命令chcp 65001
将控制台的代码页设置为UTF-8。可以找到相关帖子here和here。
将OutputEncoding设置为UTF-8。这是Console.WriteLine
实际输出Unicode字符的唯一方法。设置这个非常简单。
Console.OutputEncoding = Encoding.UTF8;
现在,Console
的任何输出都将使用Unicode。相关帖子可以找到here。
所以,就是这样!我希望这些信息有助于某人。 : - )
答案 1 :(得分:2)
另一种选择是使用P / Invoke直接更改代码页:
class Program
{
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleOutputCP(uint wCodePageID);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleCP(uint wCodePageID);
static async Task<int> Main(string[] args)
{
SetConsoleOutputCP(65001);
SetConsoleCP(65001);
Console.WriteLine("This is how you say hello in Japanese: こんにちは");
return 0;
}
}
输出: