在C#控制台应用程序中显示阿拉伯字符

我相信从Windows ME开始的13年多以前,在控制台应用程序上显示阿拉伯字符是可能的。

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

????? ??

Console.OutputEncoding = System.Text.Encoding.Unicode; Console.WriteLine("مرحبا بك"); 

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

要解决这个问题有几个问题需要解决。

  • 你需要一个支持阿拉伯语 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. 
  • 您必须安装字体。

为了testing,我使用了less数支持阿拉伯语的DejaVu Mono 。 阿拉伯语是一个强硬的语言来制作一个单体字体,因为美学的语言不能很好地工作,每个字符的固定宽度。 不过,这个字体做了一个诚实的努力。 对于其他可能的select,请参阅:

完整,等宽的Unicode字体?

字体必须以正常的方式安装在您的Windows版本中(在Vista / 7/8中right-click, Install这是right-click, Install在.ttf文件上right-click, Install )。 一旦完成,您必须按照知识库中的指示进行操作。

  1. registry编辑器 – > HKLM \ Software \ Microsoft \ WindowsNT \ CurrentVersion \ Console \ TrueTypeFont
  2. 用值DejaVu Sans Mono添加一个名为“ 000 ”的新string值
  3. 重启

在这里输入图像描述

一旦重新启动后,您可以通过从控制台菜单中select“属性”并在“字体”选项卡中更改字体来更改控制台中的字体。

在这里输入图像描述在这里输入图像描述

结果。

在这里输入图像描述

…毕竟,我们发现控制台不支持从右到左的语言。 我想你可以使用一个function,如:

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

然后呢

 Console.OutputEncoding = System.Text.Encoding.Unicode; Console.WriteLine(Reverse("مرحبا بك")); 

在这里输入图像描述

由于这里的答案不能解决你的问题。 我正在发布一个备用的解决scheme,可能有助于testing的东西。

如果您可以使用WPF项目而不是控制台应用程序,则可以:

  • 在屏幕上查看阿拉伯文字。
  • 滚动整个执行输出
  • 轻松复制输出
  • 继续使用C#作为编码语言

创build一个WPF项目,并添加multiligne文本框到您的WPFdevise具有以下属性:

 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <TextBox HorizontalAlignment="Stretch" AcceptsReturn="True" TextAlignment="Right" VerticalScrollBarVisibility="Auto" Name="textBox1" VerticalAlignment="Stretch"/> </Grid> 

TextAlignment在阿拉伯语中为Right,VerticalScrollBarVisibility为查看所有输出,AcceptsReturn为多行文本框。 Horizo​​ntalAlignment和VerticalAlignment设置为伸展以填充所有显示的窗口。

你可以在代码部分添加一个方法来简化在这个文本框中添加string,方法可能是这样的:

  private void writeToTextBox(string textToWrite) { textBox1.Text += textToWrite + "\n"; } 

全球代码behing将是:

 namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); createSourateFromXML(); } private void createSourateFromXML() { string xmlquranfile = @"C:\Users\hp\Downloads\quran-simple.xml"; XmlDocument xml_quran = new XmlDocument(); xml_quran.Load(xmlquranfile); foreach (XmlNode soura in xml_quran.DocumentElement.ChildNodes) { writeToTextBox(soura.Attributes["name"].Value); } } private void writeToTextBox(string textToWrite) { textBox1.Text += textToWrite + "\n"; } } 

foreach在我的xml文件中循环名称,并将它们添加到WPF文本框中。 这是执行结果http://i.imgur.com/d0jql3z.png的屏幕截图;

您可以通过更改文本框属性来调整显示,像字体,样式,大小等都是可自定义的。