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


150

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

Ответы:


201

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

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

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

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

C #

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 :.) и выберите Свойства -> Шрифт. Попробуйте другие шрифты, чтобы увидеть, правильно ли они отображают ваш персонаж:

изображение редактирования шрифта консоли


3
Console.OutputEncodingнельзя установить на Encoding.Unicode(UTF-16). Encoding.UTF8Однако это возможно.
Saeb Amini

3
В .NET 4.5 и более поздних версиях также поддерживается UTF-16
Сами Кухмонен

4
хм, это не работает для меня. Я пытаюсь распечатать на хинди или корейском, и мне не повезло
Куинси,

1
Вам может понадобиться перезапустить приложение, чтобы увидеть эффект после переключения между шрифтами.
Майк Кескинов

2
@Cel: Я обнаружил, что NSimSun работает на китайском и японском языках (а также на английском).
khhughes

11

Я нашел элегантное решение на 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
    }
}

2
Это действительно здорово! Однако я думаю, что принятый ответ по-прежнему применяется - если шрифт, который использует консоль, не поддерживает символы Юникода, я считаю, что этот пример не будет работать. Однако я не могу это проверить, так как в данный момент у меня нет доступа к компьютеру с Windows.
Сэм

Да, я верю, что Сэм прав. Например, я застрял в том, что шрифты командной строки не поддерживают мой набор символов.
Веверке,


8

Кроме Console.OutputEncoding = System.Text.Encoding.UTF8;

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

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

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

Теперь вы готовы пойти: введите описание изображения здесь


большое спасибо. Изменить консольный шрифт - это исправление для меня :) (также установите консоль на использование UTF-8)
Франва

0

Это работает для меня:

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

Чтобы отобразить некоторые символы, необходимо установить шрифт командной строки в Lucida Console:

  1. Открыть командную строку;

  2. Щелкните правой кнопкой мыши на верхней панели командной строки;

  3. Нажмите Свойства;

  4. Если для шрифта установлено значение Растровые шрифты, измените его на Lucida Console.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.