Вьетнамский символ в консольном приложении .NET (UTF-8) - PullRequest
7 голосов
/ 06 февраля 2010

Я пытаюсь записать строку UTF-8 (вьетнамский) в консоль C #, но безуспешно. Я работаю на Windows 7.

Я пытался использовать класс Encoding, который преобразует string в char[] в byte[], а затем в строку, но без помощи, строка вводится непосредственно из базы данных.

Вот пример

Tôi tên là Đức, потому что это очень важно tuyệt vời

Он не показывает специальный символ, такой как Đ или ... вместо этого он показывает ?, что намного хуже, чем с классом Encoding.

Кто-нибудь может попробовать это или узнать об этой проблеме?


мой код

static void Main(string[] args)
{
    XDataContext _new = new XDataContext();
    Console.OutputEncoding = Encoding.GetEncoding("UTF-8");
    string srcString = _new.Posts.First().TITLE;

    Console.WriteLine(srcString);
    // Convert the UTF-16 encoded source string to UTF-8 and ASCII.
    byte[] utf8String = Encoding.UTF8.GetBytes(srcString);
    byte[] asciiString = Encoding.ASCII.GetBytes(srcString);

    // Write the UTF-8 and ASCII encoded byte arrays. 
    Console.WriteLine("UTF-8  Bytes: {0}", BitConverter.ToString(utf8String));
    Console.WriteLine("ASCII  Bytes: {0}", BitConverter.ToString(asciiString));


    // Convert UTF-8 and ASCII encoded bytes back to UTF-16 encoded  
    // string and write.
    Console.WriteLine("UTF-8  Text : {0}", Encoding.UTF8.GetString(utf8String));
    Console.WriteLine("ASCII  Text : {0}", Encoding.ASCII.GetString(asciiString));

    Console.WriteLine(Encoding.UTF8.GetString(utf8String));
    Console.WriteLine(Encoding.ASCII.GetString(asciiString));
}

и вот выдающийся вывод

Nhà báo đi hội báo Xuân
UTF-8  Bytes: 4E-68-C3-A0-20-62-C3-A1-6F-20-C4-91-69-20-68-E1-BB-99-69-20-62-C3-
A1-6F-20-58-75-C3-A2-6E
ASCII  Bytes: 4E-68-3F-20-62-3F-6F-20-3F-69-20-68-3F-69-20-62-3F-6F-20-58-75-3F-
6E
UTF-8  Text : Nhà báo đi hội báo Xuân
ASCII  Text : Nh? b?o ?i h?i b?o Xu?n
Nhà báo đi hội báo Xuân
Nh? b?o ?i h?i b?o Xu?n


Press any key to continue . . .

Ответы [ 4 ]

7 голосов
/ 04 апреля 2010
class Program
{
    [DllImport("kernel32.dll")]
    static extern bool SetConsoleOutputCP(uint wCodePageID);

    static void Main(string[] args)
    {
        SetConsoleOutputCP(65001);
        Console.OutputEncoding = Encoding.UTF8;
        Console.WriteLine("tést, тест, τεστ, ←↑→↓∏∑√∞①②③④, Bài viết chọn lọc");
        Console.ReadLine();
    }
}

Снимок экрана с выводом (используйте Consolas или другой шрифт, содержащий все вышеперечисленные символы):

proof

0 голосов
/ 06 февраля 2010

Поддерживает ли шрифт, который вы используете в окне консоли, символы, которые вы пытаетесь отобразить?

0 голосов
/ 06 февраля 2010

это проблема с консолью cmd.exe. Он не поддерживает Unicode. [Ничего общего с C # /. NET]

Попробуйте изменить его на приложение с графическим интерфейсом, если вы можете или напишите в файл.

0 голосов
/ 06 февраля 2010

Вам нужно установить Console.OutputEncoding для соответствия UTF-8.

Возможно что-то вроде:

Console.OutputEncoding = System.Text.Encoding.UTF8;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...