web-dev-qa-db-ja.com

C#コンソールアプリケーションでのアラビア文字の表示

Windows MEの時代から、13年以上前にコンソールアプリケーションでアラビア文字を表示することが可能だったと思います。

現在、Windows8でVisualStudio 2013を使用していますが、次のコードが表示されます。

????? ??

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

コンソール出力にアラビア文字を表示する方法はありますか?

11
Alaa

これを機能させるには、解決すべき問題がいくつかあります。

  • アラビア語[〜#〜]と[〜#〜]の両方をサポートするフォントが必要です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.
  • フォントをインストールする必要があります。

テストには、アラビア語をサポートする数少ないものの1つである DejaVu Mono を使用しました。アラビア語は、各文字の固定幅では言語の美学がうまく機能しないため、モノタイプフォントを作成するのが難しい言語です。それにもかかわらず、このフォントは正直な努力をします。他の可能な代替案については、以下を参照してください。

完全な等幅Unicodeフォント?

フォントは、ご使用のバージョンのWindowsの通常の方法でインストールする必要があります(Vista/7/8では、これは.ttfファイルのright-click, Installです)。これが完了したら、KBの指示に従う必要があります。

  1. レジストリエディタ-> HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont
  2. 000」という名前の新しい文字列値を値DejaVu Sans Monoで追加します
  3. リブート

enter image description here

再起動したら、コンソールメニューから[プロパティ]を選択し、[フォント]タブでフォントを変更することにより、コンソールでフォントを変更できます。

enter image description hereenter image description here

結果。

enter image description here

...結局、 コンソールは右から左に記述する言語をサポートしていません。 次のような関数を使用できると思います。

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

enter image description here

19
J...

ここでの答えはあなたの問題を解決しないので。テストに役立つ可能性のある別のウォークアラウンドを投稿しています。

コンソールアプリケーションの代わりにWPFプロジェクトを使用できる場合は、次のことができます。

  • 画面にアラビア語のテキストを表示します。
  • 実行の出力全体をスクロールします
  • 出力を簡単にコピー
  • コーディング言語としてC#を使い続ける

WPFプロジェクトを作成し、次のプロパティを持つMultilignetextBoxをWPFデザインに追加します。

<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、および複数行のtextBoxを持つためのAcceptsReturn。表示されているすべてのウィンドウを埋めるためにストレッチするように設定されたHorizo​​ntalAlignmentとVerticalAlignment。

コードセクションにメソッドを追加して、このtextBoxに文字列を簡単に追加できます。メソッドは次のようになります。

    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ファイル内の名前をループし、それらをWPFtextBoxに追加します。これは実行結果のスクリーンショットです http://i.imgur.com/d0jql3z.png

TextBoxのプロパティを変更することで表示を調整できます。フォント、スタイル、サイズなどはすべてカスタマイズ可能です。

0
ploox