Jak pisać znaki Unicode na konsoli?

150

Zastanawiałem się, czy w aplikacji konsolowej można pisać znaki, takie jak przy użyciu .NET. Kiedy próbuję napisać ten znak, konsola wyświetla znak zapytania.

Sam
źródło

Odpowiedzi:

201

Prawdopodobnie kodowanie wyjściowe jest ustawione na ASCII. Spróbuj użyć tego przed wysłaniem wyniku:

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

( Łącze MSDN do dokumentacji pomocniczej).

A oto mała aplikacja do testowania konsoli, która może Ci się przydać:

DO#

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

Możliwe jest również, że wybrana czcionka Console nie obsługuje tego konkretnego znaku. Kliknij menu paska narzędzi systemu Windows (ikona taka jak C :.) i wybierz Właściwości -> Czcionka. Wypróbuj inne czcionki, aby sprawdzić, czy poprawnie wyświetlają Twój znak:

obraz edycji czcionki konsoli

Paul Sasik
źródło
3
Console.OutputEncodingnie można ustawić na Encoding.Unicode(UTF-16). Encoding.UTF8jest jednak możliwe.
Saeb Amini
3
W .NET 4.5 i nowszych obsługiwany jest również UTF-16
Sami Kuhmonen
4
hm, to nie działa dla mnie. Próbuję wydrukować hindi lub koreański i bez powodzenia
Quincy
1
Może być konieczne ponowne uruchomienie aplikacji, aby zobaczyć efekt po przełączeniu między czcionkami.
Mike Keskinov
2
@Cel: Odkryłem, że NSimSun działa z językiem chińskim i japońskim (a także angielskim).
kjhughes
11

Znalazłem eleganckie rozwiązanie w MSDN

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

Ten prosty program zapisuje ℃ bezpośrednio na ekranie.

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}
Destiner
źródło
2
To naprawdę fajne! Myślę jednak, że przyjęta odpowiedź nadal obowiązuje - jeśli czcionka, której używa konsola, nie obsługuje znaków Unicode, uważam, że ten przykład nie zadziała. Nie mogę tego jednak sprawdzić, ponieważ w tej chwili nie mam dostępu do komputera z systemem Windows.
Sam
Tak, uważam, że Sam ma rację. Na przykład utknąłem w fakcie, że czcionki wiersza polecenia nie obsługują mojego zestawu znaków.
Veverke
8

Oprócz Console.OutputEncoding = System.Text.Encoding.UTF8;

w przypadku niektórych znaków należy zainstalować dodatkowe czcionki (np. chińskie).

W systemie Windows 10 najpierw przejdź do Ustawienia regionu i języka i zainstaluj obsługę wymaganego języka: wprowadź opis obrazu tutaj

Następnie możesz przejść do opcji Proporcje wiersza polecenia (lub Domyślne, jeśli chcesz) i wybrać czcionkę obsługującą Twój język (na przykład KaiTi w przypadku chińskim): wprowadź opis obrazu tutaj

Teraz jesteś gotowy: wprowadź opis obrazu tutaj

watbywbarif
źródło
wielkie dzięki. Zmiana czcionki konsoli to dla mnie poprawka :) (Ustaw także konsolę do używania UTF-8)
Franva
0

To działa dla mnie:

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

Aby wyświetlić niektóre symbole, należy ustawić czcionkę wiersza polecenia na Lucida Console:

  1. Otwórz wiersz polecenia;

  2. Kliknij prawym przyciskiem myszy górny pasek wiersza polecenia;

  3. Kliknij Właściwości;

  4. Jeśli czcionka jest ustawiona na Czcionki rastrowe, zmień ją na Lucida Console.

თემო ნემსიწვერიძე
źródło