Mostrar caracteres árabes en la aplicación de consola C #

Creo que fue posible mostrar caracteres árabes en una aplicación de consola hace más de 13 años, desde los días de Windows ME.

Ahora estoy usando Visual Studio 2013, en Windows 8, y el siguiente código muestra:

????? ??

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

¿Hay alguna forma de mostrar los caracteres árabes en la salida de la consola?

Hay varios problemas que resolver para que esto funcione.

  • Necesita una fuente que admita árabe y la consola de Windows.

Ver KB: Criterios necesarios para que las fonts estén disponibles en una ventana de comandos

 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. 
  • Debe instalar la fuente.

Para probar, utilicé DejaVu Mono , que es uno de los pocos que admite árabe. El árabe es un lenguaje difícil para crear una fuente de monotipo ya que la estética del idioma no funciona bien con un ancho fijo para cada carácter. Sin embargo, esta fuente hace un esfuerzo honesto. Para otras alternativas posibles, ver:

completa, monoespaciado fuente Unicode?

La fuente debe instalarse de la forma habitual para su versión de Windows (en Vista / 7/8 right-click, Install en el archivo .ttf). Una vez hecho esto, debes seguir las instrucciones en la KB.

  1. Editor del registro -> HKLM \ Software \ Microsoft \ WindowsNT \ CurrentVersion \ Console \ TrueTypeFont
  2. Agregue un nuevo valor de cadena llamado ” 000 ” con el valor DejaVu Sans Mono
  3. Reiniciar

enter image description here

Una vez que haya reiniciado, puede cambiar la fuente en la consola seleccionando “Propiedades” en el menú de la consola y cambiando la fuente en la pestaña “Fuente”.

enter image description hereenter image description here

Resultado.

enter image description here

… así que después de todo eso, descubrimos que la consola no admite idiomas de derecha a izquierda. Supongo que podrías usar una función como:

 static string Reverse(string text) { if (text == null) return null; char[] array = text.ToCharArray(); Array.Reverse(array); return new String(array); } 

y luego hacer

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

enter image description here

Dado que la respuesta aquí no resuelve tu problema. Estoy publicando una visita alternativa que puede ayudar a probar cosas.

Si puede usar un proyecto WPF en lugar de una aplicación de consola, podrá:

  • Ver texto árabe en la pantalla.
  • Desplácese por todo el resultado de su ejecución
  • Copia fácilmente la salida
  • Sigue usando C # como lenguaje de encoding

Cree un proyecto WPF y agregue un cuadro de texto multiligne a su diseño WPF que tenga las siguientes propiedades:

     

TextAlignment a la derecha como en árabe, VerticalScrollBarVisibility para ver todo el resultado y AcceptsReturn para tener un cuadro de texto multilínea. HorizontalAlignment y VerticalAlignment configurados para estirar para llenar toda la ventana mostrada.

Puede agregar un método en la sección de código para facilitar la adición de String en este cuadro de texto, el método podría ser así:

  private void writeToTextBox(string textToWrite) { textBox1.Text += textToWrite + "\n"; } 

El código global de behing sería:

 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"; } } 

El foreach recorre los nombres en mi archivo xml y los agrega al cuadro de texto de WPF. Esta es una captura de pantalla del resultado de la ejecución http://i.imgur.com/d0jql3z.png

Puede ajustar la pantalla cambiando las propiedades del cuadro de texto, cosas como la fuente, el estilo y el tamaño son todos personalizables.