将 C# 控制台应用程序设置为 Unicode 输出

问题描述 投票:0回答:4

我有一个 C# 控制台应用程序,我试图在其中做一些 ASCII 艺术。然而,我想使用的一些字符是 Unicode。因此,我在互联网/SO 上搜索,但找不到关于如何在 C# 控制台应用程序中将控制台设置为 Unicode 的统一答案。

TDLR:如何将 C# 控制台应用程序中的控制台设置为 Unicode?

编辑:在搜索与此问题无关的内容后,我确实找到了这篇文章

c# unicode console-application
4个回答
27
投票

事实证明,为了使控制台显示 Unicode 字符,您需要设置多项内容。

  1. 将控制台设置为 Unicode 支持的字体。 为此,请使用
    Console.ReadKey();
    运行一次 C# 控制台应用程序,以便窗口保持打开状态。右键单击窗口的标题栏并选择属性。通过 Visual Studio 进行调试时,这些选项将保留。 您可能需要使用默认菜单来在整个系统中保留选项。Fonts选项卡中,您需要将字体设置为
    Lucida Console
    。此字体支持 Unicode 字符。相关帖子可以在这里找到。
  2. 将控制台的代码页设置为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。相关帖子可以在这里这里找到。

  3. 将 OutputEncoding 设置为 UTF-8。 这是

    Console.WriteLine
    实际输出 Unicode 字符的唯一方法。设置这个非常简单。

    Console.OutputEncoding = Encoding.UTF8;
    

    现在,

    Console
    的任何输出都将采用 Unicode。相关帖子可以在这里找到。

所以,就是这样!我希望这些信息对某人有所帮助。 :-)


13
投票

另一种选择是使用 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;
    }
}

输出:


0
投票

我更喜欢的解决方案是使用控制面板下的区域将我的配置文件的活动控制台代码页更改为 utf-8。 (见图) 重新启动并选择可以显示所需字符的字体。


0
投票
// VS 2022
// file Program.cs
// Info.CodePage        Info.Name                    Info.DisplayName
//    1200               utf - 16                      Unicode
//    65001              utf-8                        Unicode (UTF-8)

Console.OutputEncoding = System.Text.Encoding.GetEncoding(1200);
Console.InputEncoding  = System.Text.Encoding.GetEncoding(1200);

有关编码和支持的代码页列表的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.