在C#控制台应用程序中显示阿拉伯字符
我相信从Windows ME开始的13年多以前,在控制台应用程序上显示阿拉伯字符是可能的。
现在我正在使用Visual Studio 2013,在Windows 8上,以下代码显示:
????? ??
Console.OutputEncoding = System.Text.Encoding.Unicode; Console.WriteLine("مرحبا بك");
无论如何,在控制台输出中显示阿拉伯字符?
要解决这个问题有几个问题需要解决。
- 你需要一个支持阿拉伯语和 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.
- 您必须安装字体。
为了testing,我使用了less数支持阿拉伯语的DejaVu Mono 。 阿拉伯语是一个强硬的语言来制作一个单体字体,因为美学的语言不能很好地工作,每个字符的固定宽度。 不过,这个字体做了一个诚实的努力。 对于其他可能的select,请参阅:
完整,等宽的Unicode字体?
字体必须以正常的方式安装在您的Windows版本中(在Vista / 7/8中right-click, Install
这是right-click, Install
在.ttf文件上right-click, Install
)。 一旦完成,您必须按照知识库中的指示进行操作。
- registry编辑器 – > HKLM \ Software \ Microsoft \ WindowsNT \ CurrentVersion \ Console \ TrueTypeFont
- 用值
DejaVu Sans Mono
添加一个名为“000
”的新string值 - 重启
一旦重新启动后,您可以通过从控制台菜单中select“属性”并在“字体”选项卡中更改字体来更改控制台中的字体。
结果。
…毕竟,我们发现控制台不支持从右到左的语言。 我想你可以使用一个function,如:
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("مرحبا بك"));
由于这里的答案不能解决你的问题。 我正在发布一个备用的解决scheme,可能有助于testing的东西。
如果您可以使用WPF项目而不是控制台应用程序,则可以:
- 在屏幕上查看阿拉伯文字。
- 滚动整个执行输出
- 轻松复制输出
- 继续使用C#作为编码语言
创build一个WPF项目,并添加multiligne文本框到您的WPFdevise具有以下属性:
<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在阿拉伯语中为Right,VerticalScrollBarVisibility为查看所有输出,AcceptsReturn为多行文本框。 HorizontalAlignment和VerticalAlignment设置为伸展以填充所有显示的窗口。
你可以在代码部分添加一个方法来简化在这个文本框中添加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文本框中。 这是执行结果http://i.imgur.com/d0jql3z.png的屏幕截图;
您可以通过更改文本框属性来调整显示,像字体,样式,大小等都是可自定义的。