gpt4 book ai didi

c# - 如何使控制台能够打印 65535 个 UNICODE 字符中的任何一个

转载 作者:可可西里 更新时间:2023-11-01 07:54:49 25 4
gpt4 key购买 nike

我正在试验 unicode 字符并从 Wikipedia 中获取 unicode 值页

Ihe 问题是我的控制台显示所有 C0 控件和基本拉丁语 unicode 字符,即从 U+0000 到 U+00FF 但对于所有其他类别,如 Latin Extended -B 、西里尔文、其他语言等, 控制台打印问号字符 (?)。

我的C#代码是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DataTypes
{
class Program
{
static void Main(string[] args)
{

char ch = '\u0181';



Console.WriteLine("the unicode character is value" + ch);

}
}
}

我在 windows 7 和 Visual Studio 2010 上工作。我应该怎么做才能增加对 Unicode 的支持。

最佳答案

这个问题背后有很多历史,我会先仔细研究一下。控制台模式应用程序只能使用 8 位文本编码运行。这要追溯到 42 年前 Ken Thompson 等人在设计 Unix 时做出的设计决定。 Unix 的一个核心特性是终端 I/O 是通过管道完成的,您可以将管道链接在一起,将一个程序的输出提供给另一个程序的输入。此功能也在 Windows 中实现,并受 .NET 以及 ProcessStartInfo.RedirectStandardXxxx 属性的支持。

不错的功能,但当操作系统开始采用 Unicode 时,这就成了一个问题。 Windows NT 是第一个以 Unicode 为核心的系统。 Unicode 字符必须始终进行编码,当时常见的选择是 UCS,后来演变为 utf-16。现在 I/O 重定向出现了问题,一个吐出 16 位编码字符的程序在重定向到一个仍然使用 8 位编码字符的程序时将无法正常运行。

致谢 Ken Thompson 为了解决这个问题,他发明了 utf-8 编码。

这也适用于 Windows。在控制台模式应用程序中很容易做到,您必须重新分配 Console.OutputEncoding 属性:

using System;
using System.Text;

class Program {
static void Main(string[] args) {
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Ĥėļŀō ŵŏŗłđ");
Console.ReadLine();
}
}

但是您现在会遇到另一个问题,为控制台窗口选择的字体很可能无法呈现文本。按 Alt+Space 调用系统菜单、属性、字体选项卡。您需要选择一种非光栅字体。选择非常少,在 Vista 及更高版本上,您可以选择 Consolas。重新运行您的程序,重音字符应该正确呈现。不幸的是,以编程方式强制控制台字体是一个问题,您需要记录此配置步骤。此外,像 Consolas 这样的字体没有完整的 Unicode 字形集。您可能会看到没有字形的 Unicode 代码点出现矩形。所有这一切都毫不含糊地提醒您,创建 GUI 程序确实是您最好的选择。

关于c# - 如何使控制台能够打印 65535 个 UNICODE 字符中的任何一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com