我相信自从Windows ME诞生以来,13年多以前就可以在控制台应用程序上显示阿拉伯字符。
现在我正在使用Visual Studio 2013,在Windows 8上,以下代码显示:
????? ??
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine("مرحبا بك");
无论如何在控制台输出中显示阿拉伯字符?
答案 0 :(得分:19)
要解决此问题需要解决几个问题。
请参见知识库: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中的说明进行操作。
000
”的新字符串值,其值为DejaVu Sans Mono
重新启动后,您可以通过从控制台菜单中选择“属性”并在“字体”选项卡中更改字体来更改控制台中的字体。
结果。
...毕竟,我们发现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("مرحبا بك"));
答案 1 :(得分:0)
由于这里的答案并不能解决您的问题。我发布了一个可能有助于测试内容的备用解决方法。
如果您可以使用WPF项目而不是控制台应用程序,那么您将能够:
创建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。 HorizontalAlignment和VerticalAlignment设置为拉伸以填充所有显示的窗口。
你可以在代码部分添加一个方法来简化在这个textBox中添加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 textBox中。 这是执行结果http://i.imgur.com/d0jql3z.png
的屏幕截图您可以通过更改textBox属性来调整显示,字体,样式,大小等内容都可以自定义。