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


150

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

Answers:


201

您的输出编码可能设置为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 :.的图标),然后选择属性->字体。尝试其他一些字体,看它们是否正确显示了您的字符:

控制台字体图片编辑


3
Console.OutputEncoding无法设置为Encoding.Unicode(UTF-16)。Encoding.UTF8但是,这是可能的。
塞布·阿米尼

3
在.NET 4.5和更高版本中,还支持UTF-16
Sami Kuhmonen 2013年

4
嗯,这对我不起作用。我正在尝试打印印地文或韩文,但没有运气
昆西

1
您可能需要重新启动应用程序才能在字体之间切换后看到效果。
Mike Keskinov

2
@Cel:我发现NSimSun可以使用中文和日语(以及英语)。
kjhughes

11

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

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

这个简单的程序直接在屏幕上写℃。

using System;

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

2
真的很整洁!但是,我认为可接受的答案仍然适用-如果控制台使用的字体不支持Unicode字符,我相信此示例将无法正常工作。但是,我目前无法访问Windows计算机,因此无法检查。
2015年

是的,我相信山姆是对的。例如,我被卡在命令提示符字体不支持我的字符集这一事实。
Veverke


8

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

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

Windows 10中,首先转到“ 区域和语言设置”并安装所需语言的支持: 在此处输入图片说明

之后,您可以转到命令提示符属性(如果需要,可以选择默认值),然后选择一些支持您的语言的字体(例如中文的KaiTi): 在此处输入图片说明

现在您可以开始了: 在此处输入图片说明


非常感谢。更改控制台字体适合我:)(还可以将控制台设置为使用UTF-8)
Franva

0

这对我有用:

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

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

  1. 打开命令提示符;

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

  3. 单击属性;

  4. 如果字体设置为“光栅字体”,则将其更改为Lucida Console。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.