Вьетнамский символ в Консольном приложении (UTF-8).NET

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

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

Вот некоторый пример

Tôi tên là Đức, cuộc sống thật vui vẻ tuyệt vời

Это не показывает специальный символ как Đ или ... вместо этого это обнаруживается ?, намного хуже, чем с классом Кодирования.

Кто-либо может испытать это или знать об этой проблеме?


Мой код

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 . . .
7
задан phuclv 1 August 2016 в 16:40
поделиться

4 ответа

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

7
ответ дан 7 December 2019 в 10:01
поделиться

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

Вероятно, что-то вроде:

Console.OutputEncoding = System.Text.Encoding.UTF8;
0
ответ дан 7 December 2019 в 10:01
поделиться

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

0
ответ дан 7 December 2019 в 10:01
поделиться

Всякий раз, когда вы получаете/передаете данные из сети, помните, чтобы преобразовать в/из сети и порядок байтов хоста. Здесь следует использовать функции C htons , htonl и т.д. или эквиваленты на вашем языке.

Всякий раз, когда вы считываете из файла многобайтовые значения (например, UTF-16 символов или 32-разрядных int), так как этот файл мог быть создан в системе с другой зависимостью. Если файл UTF 16 или 32, он, вероятно, имеет спецификацию (метку порядка байтов). В противном случае формат файла должен будет каким-либо образом указать endianness.

-121--3165642-

Исключение ClassNotFoundException возникает, когда класс, о котором сообщается, не найден ClassLoader. Обычно это означает, что класс отсутствует в CLASSPATH. Это также может означать, что данный класс пытается быть загружен из другого класса, который был загружен в родительский класс, и, следовательно, класс из дочернего класса не виден. Иногда это происходит при работе в более сложных средах, таких как App Server (WebSphere печально известен для таких проблем с классами).

Часто люди путают java.lang.NoClassDefFoundError с java.lang.ClassNotFoundException , однако существует важное различие. Например, исключение (ошибка, поскольку java.lang.NoClassDefFoundError является подклассом java.lang.Error), например,

java.lang.NoClassDefFoundError:
org/apache/activemq/ActiveMQConnectionFactory

, не означает, что класс ActiveMQConnityFactory отсутствует в CLASSPATH. Совершайте совершенно противоположное. Это означает, что класс ActiveMQConnureFactory был найден ClassLoader, однако при попытке загрузить класс возникла ошибка при чтении определения класса. Обычно это происходит, когда данный класс имеет статические блоки или членов, использующие класс, который не найден ClassLoader. Чтобы найти виновника, просмотрите источник данного класса (в данном случае ActiveMQConnireFactory) и найдите код с помощью статических блоков или статических членов. Если у вас нет доступа к источнику, просто декомпилируйте его с помощью JAD.

Изучив код, скажите, что вы находите строку кода, как показано ниже, убедитесь, что класс SomeClass в вашем CLASSPATH.

private static SomeClass foo = new SomeClass();

Наконечник: Чтобы узнать, какой банке принадлежит класс, можно воспользоваться сайтом jarFinder. Это позволяет указать имя класса с помощью подстановочных знаков и выполнять поиск класса в базе данных банок данных. jarhoo позволяет вам сделать то же самое, но его больше не свободно использовать.

Если требуется найти банку, к которой принадлежит класс, в локальном пути, можно использовать служебную программу, такую как jarscan ( http://www.inetfeedback.com/jarscan/ ). Вы просто указываете класс, который вы хотите найти, и путь к корневому каталогу, где вы хотите, чтобы он начал поиск класса в банках и застежках -молниях.

-121--522357-

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

Попробуйте изменить его на GUI-приложение, если можно или записать в файл.

-1
ответ дан 7 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: