在C#console应用程序中显示阿拉伯字符

Ala*_*laa 11 c# unicode arabic console-application

我相信自从Windows ME诞生以来,13年多以前可以在控制台应用程序上显示阿拉伯字符.

现在我使用的是Visual Studio 2013,在Windows 8上,以下代码显示:

????? ??

   Console.OutputEncoding = System.Text.Encoding.Unicode;
   Console.WriteLine("????? ??");
Run Code Online (Sandbox Code Playgroud)

无论如何在控制台输出中显示阿拉伯字符?

J..*_*... 19

要解决此问题,需要解决几个问题.

  • 您需要一种支持阿拉伯语和 Windows控制台的字体.

请参阅KB:命令窗口中可用字体的必要条件

The font must be a fixed-pitch font.
The font cannot be an italic font.
The font cannot have a negative A or C space.
If it is a TrueType font, it must be FF_MODERN.
If it is not a TrueType font, it must be OEM_CHARSET.
Run Code Online (Sandbox Code Playgroud)
  • 您必须安装该字体.

为了测试,我使用了DejaVu Mono,这是支持阿拉伯语的为数不多的之一.阿拉伯语是制作单色字体的一种强硬语言,因为语言的美学效果不适合每个字符的固定宽度.不过,这种字体是一种诚实的努力.其他可能的替代方案,请参阅:

完整的,等宽的Unicode字体?

必须以您的Windows版本的正常方式安装该字体(在Vista/right-click, Install7/8中,这是在.ttf文件中).完成此操作后,您必须按照KB中的说明进行操作.

  1. 注册表编辑器 - > HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont
  2. 使用值添加名为" 000" 的新字符串值DejaVu Sans Mono
  3. 重启

在此输入图像描述

重新启动后,可以通过从控制台菜单中选择"属性"并更改"字体"选项卡中的字体来更改控制台中的字体.

在此输入图像描述在此输入图像描述

结果.

在此输入图像描述

...毕竟,我们发现控制台不支持从右到左的语言. 我想你可以使用像这样的函数:

static string Reverse(string text)
{
   if (text == null) return null; 
   char[] array = text.ToCharArray();
   Array.Reverse(array);
   return new String(array);
}
Run Code Online (Sandbox Code Playgroud)

然后呢

Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine(Reverse("????? ??"));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述