Windows MEの時代から、13年以上前にコンソールアプリケーションでアラビア文字を表示することが可能だったと思います。
現在、Windows8でVisualStudio 2013を使用していますが、次のコードが表示されます。
????? ??
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine("مرحبا بك");
コンソール出力にアラビア文字を表示する方法はありますか?
これを機能させるには、解決すべき問題がいくつかあります。
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 を使用しました。アラビア語は、各文字の固定幅では言語の美学がうまく機能しないため、モノタイプフォントを作成するのが難しい言語です。それにもかかわらず、このフォントは正直な努力をします。他の可能な代替案については、以下を参照してください。
フォントは、ご使用のバージョンのWindowsの通常の方法でインストールする必要があります(Vista/7/8では、これは.ttfファイルのright-click, Install
です)。これが完了したら、KBの指示に従う必要があります。
000
」という名前の新しい文字列値を値DejaVu Sans Mono
で追加します再起動したら、コンソールメニューから[プロパティ]を選択し、[フォント]タブでフォントを変更することにより、コンソールでフォントを変更できます。
結果。
...結局、 コンソールは右から左に記述する言語をサポートしていません。 次のような関数を使用できると思います。
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("مرحبا بك"));
ここでの答えはあなたの問題を解決しないので。テストに役立つ可能性のある別のウォークアラウンドを投稿しています。
コンソールアプリケーションの代わりにWPFプロジェクトを使用できる場合は、次のことができます。
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。表示されているすべてのウィンドウを埋めるためにストレッチするように設定されたHorizontalAlignmentと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のプロパティを変更することで表示を調整できます。フォント、スタイル、サイズなどはすべてカスタマイズ可能です。