There are several issues to resolve to get this to work.
- You need a font that supports both Arabic AND the windows console.
See KB : 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.
- You must install the font.
For testing, I used DejaVu Mono, which is one of the few that supports Arabic. Arabic is a tough language to make a monotype font with since the aesthetics of the language do not work well with a fixed width for each character. Nevertheless, this font makes an honest effort. For other possible alternatives, see :
complete, monospaced Unicode font?
The font must be installed in the normal way for your version of Windows (in Vista/7/8 this is right-click, Install
on the .ttf file). Once this is done, you have to follow the directions in the KB.
- Registry Editor –> HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont
- Add a new string value named “
000
” with the valueDejaVu Sans Mono
- Reboot
Once you’ve rebooted, you can change the font in the console by selecting “Properties” from the console menu and changing the font in the “Font” tab.
Result.
… so after all that, we discover that the console does not support Right-To-Left languages. I guess you could use a function like :
static string Reverse(string text)
{
if (text == null) return null;
char[] array = text.ToCharArray();
Array.Reverse(array);
return new String(array);
}
and then do
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine(Reverse("مرحبا بك"));