Wednesday, 29 February 2012

Console.OutputEncoding

Sometimes we need to output non-english characters in Console, this is possible(really?) using Console.OutputEncoding property. Below is sample code to output latin & chinese characters

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Test
{
    class Program
    {
        static string latinString = "蘇雷什";
        static string chineseString = "蘇雷什:密碼";

        [DllImport("kernel32.dll")]
        static extern bool SetConsoleOutputCP(uint wCodePageID);

        static void Main(string[] args)
        {
            var latinEncoding = Encoding.GetEncoding("ISO-8859-1");
            var utf8Encoding = Encoding.GetEncoding("UTF-8");

            //-------Start Chinese Characters------------

            SetConsoleOutputCP((uint)utf8Encoding.CodePage);

            Console.OutputEncoding = utf8Encoding;
            Console.WriteLine(chineseString);
          
            //-------End Chinese Characters------------

            //-------Start Latin Characters------------

            SetConsoleOutputCP((uint)latinEncoding.WindowsCodePage);

            Console.OutputEncoding = latinEncoding;
            Console.WriteLine(latinString);

            //-------End Latin Characters------------
        }
    }
}

But wait - it ain't going to display on windows(English) OS.

http://stackoverflow.com/questions/6405428/can-i-get-console-to-show-chinese
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/fe549b29-3e09-4176-b317-1e0094abf71a/
http://www.csharp-examples.net/culture-names/
http://stackoverflow.com/questions/2213541/vietnamese-character-in-net-console-application-utf-8

No comments: