Как записать символы Unicode в консоль?

122

Мне было интересно, можно ли в консольном приложении писать символы типа с помощью .NET. Когда я пытаюсь записать этот символ, консоль выводит знак вопроса.

Теги:
console-application

4 ответа

162
Лучший ответ

Вероятно, для вашей выходной кодировки установлено значение ASCII. Попробуйте использовать это перед отправкой вывода:

Console.OutputEncoding = System.Text.Encoding.UTF8;

(MSDN ссылка в подтверждающую документацию.)

И вот небольшое консольное тестовое приложение, которое вам может пригодиться:

С#

using System;
using System.Text;

public static class ConsoleOutputTest {
    public static void Main() {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        for (var i = 0; i <= 1000; i++) {
            Console.Write(Strings.ChrW(i));
            if (i % 50 == 0) { // break every 50 chars
                Console.WriteLine();
            }
        }
        Console.ReadKey();
    }
}

VB.NET

imports Microsoft.VisualBasic
imports System

public module ConsoleOutputTest 
    Sub Main()
        Console.OutputEncoding = System.Text.Encoding.UTF8
        dim i as integer
        for i = 0 to 1000
            Console.Write(ChrW(i))
            if i mod 50 = 0 'break every 50 chars 
                Console.WriteLine()
            end if
        next
    Console.ReadKey()
    End Sub
end module

Также возможно, что ваш шрифт консоли не поддерживает этот конкретный символ. Нажмите на меню панели инструментов Windows (значок C:.) и выберите "Свойства" → "Шрифт". Попробуйте другие шрифты, чтобы увидеть, правильно ли они отображают ваш персонаж:

Изображение 7847

  • 0
    спасибо, я искал "console.outputEncoding", но, к сожалению, я не думаю, что этот символ был поддержан моим шрифтом. Вы можете расширить на панели инструментов окна вещь? Спасибо за быстрый ответ
  • 0
    Да, это маленькая иконка в верхнем левом углу окна консоли, которая выглядит как крошечная версия консоли. Каждое окно Windows (которое имеет заголовок и границу) имеет это. Просто нажмите на него, чтобы увидеть меню, один из вариантов будет Свойства. Нажмите на него и найдите вкладку «Шрифт», чтобы настроить шрифты.
Показать ещё 11 комментариев
8

Я нашел несколько элегантных решений на MSDN

System.Console.Write('\uXXXX') //XXXX is hex Unicode for character

Эта простая программа записывает ℃ прямо на экран.

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}
  • 1
    Это действительно здорово! Однако я думаю, что принятый ответ все еще применяется - если шрифт, который использует консоль, не поддерживает символы Unicode, я считаю, что этот пример не будет работать. Однако я не могу это проверить, так как в данный момент у меня нет доступа к компьютеру с Windows.
  • 0
    Да, я верю, что Сэм прав. Например, я застрял в том, что шрифты командной строки не поддерживают мой набор символов.
7

Свойство Console.OutputEncoding

http://msdn.microsoft.com/library/system.console.outputencoding(v = vs .110).aspx

Обратите внимание, что для успешного отображения символов Unicode на консоли требуется следующее:

  • Консоль должна использовать шрифт TrueType, такой как Lucida Console или Consolas, для отображения символов
0

Помимо Console.OutputEncoding = System.Text.Encoding.UTF8;

для некоторых символов вам нужно установить дополнительные шрифты (например, китайский).

В Windows 10 сначала перейдите в " Регион и настройки языка" и установите поддержку для требуемого языка: Изображение 7848

После этого вы можете перейти к разделу "Командная строка" (или "По умолчанию", если хотите) и выбрать какой-нибудь шрифт, который поддерживает ваш язык (например, KaiTi в китайском случае): Изображение 7849

Теперь вы готовы идти: Изображение 7850

Ещё вопросы

Сообщество Overcoder
Наверх
Меню