如何将Unicode字符写入控制台?

How to write Unicode characters to the console?

提问人:Sam 提问时间:4/22/2011 最后编辑:Peter O.Sam 更新时间:11/18/2020 访问量:185521

问:

我想知道是否可以在控制台应用程序中编写像使用 .NET 一样的字符。当我尝试编写此字符时,控制台会输出一个问号。

C# .NET vb.net 控制台应用程序

评论


答:

266赞 Paul Sasik 4/22/2011 #1

您的输出编码可能设置为 ASCII。在发送输出之前尝试使用它:

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

(指向支持文档的 MSDN 链接

这里有一个小小的控制台测试应用程序,你可能会发现很方便:

C#

using System;
using System.Text;

public static class ConsoleOutputTest {
    public static void Main() {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        for (var i = 0; i <= 1000; i++) {
            Console.Write(Strings.ChrW(i));
            if (i % 50 == 0) { // break every 50 chars
                Console.WriteLine();
            }
        }
        Console.ReadKey();
    }
}

VB.NET

imports Microsoft.VisualBasic
imports System

public module ConsoleOutputTest 
    Sub Main()
        Console.OutputEncoding = System.Text.Encoding.UTF8
        dim i as integer
        for i = 0 to 1000
            Console.Write(ChrW(i))
            if i mod 50 = 0 'break every 50 chars 
                Console.WriteLine()
            end if
        next
    Console.ReadKey()
    End Sub
end module

您选择的控制台字体也可能不支持该特定字符。单击 Windows 工具栏菜单(图标类似于 C:.),然后选择“属性”-“>字体”。尝试一些其他字体,看看它们是否能正确显示你的角色:

picture of console font edit

评论

3赞 Saeb Amini 1/11/2012
Console.OutputEncoding不能设置为 (UTF-16)。但是,这是可能的。Encoding.UnicodeEncoding.UTF8
3赞 Sami Kuhmonen 12/12/2013
在 .NET 4.5 及更高版本中,还支持 UTF-16
6赞 Quincy 1/29/2015
嗯,这对我不起作用。我正在尝试打印印地语或韩语,但没有运气
1赞 Mike Keskinov 2/18/2015
您可能需要重新启动应用程序才能在字体之间切换后查看效果。
2赞 kjhughes 5/4/2018
@Cel:我发现NSimSun适用于中文和日文(以及英文)。
13赞 Pažout 4/9/2014 #2

Console.OutputEncoding 属性

https://learn.microsoft.com/en-us/dotnet/api/system.console.outputencoding

请注意,要成功向控制台显示 Unicode 字符,需要满足以下条件:

  • 控制台必须使用 TrueType 字体(如 Lucida Console 或 Consolas)来显示字符。
14赞 Destiner 9/14/2014 #3

我在MSDN上找到了一些优雅的解决方案

System.Console.Write('\uXXXX') //XXXX is hex Unicode for character

这个简单的程序直接在屏幕上写入°C。

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}

评论

2赞 Sam 3/10/2015
这真是太整洁了!但是,我认为公认的答案仍然适用 - 如果控制台使用的字体不支持 unicode 字符,我相信这个例子将不起作用。但是,我无法检查这一点,因为我目前无法访问 Windows 计算机。
0赞 Veverke 9/21/2015
是的,我相信山姆是对的。例如,我被困在命令提示符字体不支持我的字符集这一事实中。
0赞 Su Llewellyn 6/2/2023
这个答案最适合我所做的大多数事情——我让控制台默认为其字体,并使用将输出类型设置为 UTF8 的技巧(显示在接受的答案中)。
13赞 watbywbarif 1/23/2019 #4

此外Console.OutputEncoding = System.Text.Encoding.UTF8;

对于某些字符,您需要安装额外的字体(即。中文)。

Windows 10 中,首先转到“区域和语言设置”,然后安装对所需语言的支持:enter image description here

之后,您可以转到命令提示符程序(或默认值,如果您愿意)并选择一些支持您的语言的字体(例如中文大小写的 KaiTi):enter image description here

现在你已经准备好了:enter image description here

评论

0赞 Franva 3/10/2020
多谢。更改控制台字体是我的解决方法:)(同时将控制台输出设置为使用 UTF-8)
1赞 თემო ნემსიწვერიძე 3/11/2020 #5

这对我有用:

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

要显示某些符号,需要将命令提示符的字体设置为 Lucida 控制台:

  1. 打开命令提示符;

  2. 右键单击命令提示符的顶部栏;

  3. 单击“属性”;

  4. 如果字体设置为“光栅字体”,请将其更改为“Lucida 控制台”。