Як записати символи 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

Можливо також, що ваш вибір шрифту Console не підтримує саме цей символ. Клацніть на меню панелі інструментів Windows (піктограма типу C :.) та виберіть Властивості -> Шрифт. Спробуйте кілька інших шрифтів, щоб побачити, чи правильно вони відображають ваш персонаж:

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


3
Console.OutputEncodingне може бути встановлено на Encoding.Unicode(UTF-16). Encoding.UTF8Однак це можливо.
Саеб Аміні

3
У .NET 4.5 і пізніших версіях також підтримується UTF-16
Самі Кухмонен

4
хм, це не працює для мене. Я намагаюся роздрукувати хінді чи корейську, і не пощастило
Квінсі

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

2
@Cel: Я виявив, що NSimSun працює для китайської та японської (а також англійської).
kjhughes

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
Це справді акуратно! Однак я думаю, що прийнята відповідь все ж застосовується - якщо шрифт, який використовує консоль, не підтримує символи unicode, я вважаю, що цей приклад не буде працювати. Я не можу це перевірити, оскільки на даний момент у мене немає доступу до комп'ютера Windows.
Сем

Так, я вважаю, що Сем правильно. Я, наприклад, застряг у тому, що шрифти командного рядка не підтримують мій набір символів.
Веверке


8

Крім того Console.OutputEncoding = System.Text.Encoding.UTF8;

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

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

Після цього ви можете перейти до командних рядків пропорцій (або за замовчуванням, якщо вам подобається) та вибрати якийсь шрифт, який підтримує вашу мову (наприклад, KaiTi у китайському випадку): введіть тут опис зображення

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


дуже дякую. Змінити шрифт консолі - це виправлення для мене :) (Також встановіть консоль, поставлену для використання UTF-8)
Franva

0

Це працює для мене:

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

Щоб відобразити деякі символи, потрібно встановити шрифт командної строки на консоль Lucida:

  1. Відкритий командний рядок;

  2. Клацніть правою кнопкою миші на верхній панелі командного рядка;

  3. Клацніть Властивості;

  4. Якщо для шрифту встановлено Raster Fonts, змініть його на Lucida Console.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.