我正在尝试使用unicode字符并从维基百科页面获取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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Windows 7,Visual Studio 2010.我该怎么做才能增加Unicode支持.
Han*_*ant 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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您现在遇到另一个问题,为控制台窗口选择的字体很可能无法呈现文本.按Alt + Space可调用系统菜单,属性,字体选项卡.您需要选择非光栅字体.Pickings非常纤薄,在Vista上你可以选择Consolas.重新运行您的程序,重音字符应正确呈现.不幸的是,以编程方式强制控制台字体是一个问题,您需要记录此配置步骤.此外,像Consolas这样的字体没有完整的可能Unicode字形集.您可能会看到没有字形的Unicode代码点出现矩形.所有这些都是一个不起眼的提醒,创建一个GUI程序真的是你最好的选择.