我相信在13年前的Windows ME时代,可以在控制台应用程序中显示阿拉伯字符。
现在我正在使用Visual Studio 2013,在Windows 8上运行以下代码会显示:
????? ??
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine("مرحبا بك");
有没有办法在控制台输出中显示阿拉伯字符?
我相信在13年前的Windows ME时代,可以在控制台应用程序中显示阿拉伯字符。
现在我正在使用Visual Studio 2013,在Windows 8上运行以下代码会显示:
????? ??
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.
为了测试,我使用了DejaVu Mono,这是为数不多支持阿拉伯语的字体之一。由于阿拉伯语的美学与每个字符的固定宽度不相容,因此制作单调字体很具挑战性。尽管如此,这种字体仍然做出了诚实的努力。有关其他可能的替代方案,请参见:
必须按照您的Windows版本的正常方式安装字体(在Vista / 7/8中,这是对.ttf文件进行右键单击,安装
)。完成后,您必须按照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项目,并向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设置为显示所有输出内容;将AcceptsReturn设置为允许多行输入的文本框。将HorizontalAlignment和VerticalAlignment设置为拉伸以填满整个窗口。
您可以在代码部分添加一个方法来方便向该文本框中添加字符串,该方法可以如下所示:
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属性来调整显示,例如字体、样式、大小等都可以自定义。