我正在尝试使用unicode字符并从Wikipedia页
中获取unicode值我的问题是我的控制台显示所有 C0控制和基本拉丁 unicode字符,即从U + 0000到U + 00FF但是对于所有其他类别,如 Latin Extended -B,Cyrillic,其他语言等,控制台打印问号字符(?)。
我的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支持。
答案 0 :(得分:20)
这个问题背后有很多历史,我会先讨论一下这个问题。控制台模式应用程序只能使用8位文本编码。这可以追溯到42年前Ken Thompson等人设计Unix时做出的设计决策。 Unix的核心功能是终端I / O通过管道完成,您可以将管道链接在一起,将一个程序的输出提供给另一个程序的输入。此功能也在Windows中实现,并且受.NET以及ProcessStartInfo.RedirectStandardXxxx属性的支持。
很棒的功能但是当操作系统开始采用Unicode时,这成了一个问题。 Windows NT是第一个完全采用Unicode的核心。必须始终对Unicode字符进行编码,当时常见的选择是UCS,后来变为utf-16。现在I / O重定向存在问题,当重定向到仍使用8位编码字符的程序时,一个吐出16位编码字符的程序将无法正常运行。
感谢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可调用系统菜单,属性,字体选项卡。您需要选择非光栅字体。 Pickings非常纤薄,在Vista上你可以选择Consolas。重新运行您的程序,重音字符应正确呈现。不幸的是,以编程方式强制控制台字体是一个问题,您需要记录此配置步骤。此外,像Consolas这样的字体没有完整的可能Unicode字形集。您可能会看到没有字形的Unicode代码点出现矩形。一个不起眼的提醒,创建一个GUI程序真的是你最好的选择。