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

问题描述 投票:10回答:2

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

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

????? ??

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

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

c# unicode console-application arabic
2个回答
19
投票

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

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

见KB:Necessary criteria for fonts to be available in a command window

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.
  • 您必须安装该字体。

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

complete, monospaced Unicode font?

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

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

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

结果。

...毕竟,我们发现console does not support Right-To-Left languages.我想你可以使用如下函数:

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("مرحبا بك"));


0
投票

由于这里的答案并不能解决您的问题。我发布了一个可能有助于测试内容的备用解决方法。

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

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

创建一个WPF项目并向具有以下属性的WPF设计添加multiligne textBox:

<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向右,如阿拉伯语,VerticalScrollBarVisibility查看所有输出,而AcceptsReturn有多行textBox。 Horizo​​ntalAlignment和VerticalAlignment设置为拉伸以填充所有显示的窗口。

您可以在代码部分添加一个方法,以便在此textBox中添加String,方法可以是这样的:

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

背后的全球代码将是:

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 textBox中。这是执行结果http://i.imgur.com/d0jql3z.png的屏幕截图

您可以通过更改textBox属性来调整显示,可以自定义字体,样式,大小等内容。

© www.soinside.com 2019 - 2024. All rights reserved.