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.

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


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
    }
}

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.