Wie schreibe ich Unicode-Zeichen in die Konsole?

150

Ich habe mich gefragt, ob es in einer Konsolenanwendung möglich ist, Zeichen wie mit .NET zu schreiben . Wenn ich versuche, dieses Zeichen zu schreiben, gibt die Konsole ein Fragezeichen aus.

Sam
quelle

Antworten:

200

Es ist wahrscheinlich, dass Ihre Ausgabecodierung auf ASCII eingestellt ist. Versuchen Sie dies, bevor Sie eine Ausgabe senden:

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

(MSDN- Link zur unterstützenden Dokumentation.)

Und hier ist eine kleine Konsolentest-App, die Sie vielleicht nützlich finden:

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

Es ist auch möglich, dass Ihre Wahl der Konsolenschriftart dieses bestimmte Zeichen nicht unterstützt. Klicken Sie auf das Windows-Symbolleistenmenü (Symbol wie C:.) Und wählen Sie Eigenschaften -> Schriftart. Probieren Sie einige andere Schriftarten aus, um festzustellen, ob sie Ihren Charakter richtig anzeigen:

Bild der Konsolenschriftart bearbeiten

Paul Sasik
quelle
3
Console.OutputEncodingkann nicht auf Encoding.Unicode(UTF-16) gesetzt werden. Encoding.UTF8ist jedoch möglich.
Saeb Amini
3
In .NET 4.5 und höher wird auch UTF-16 unterstützt
Sami Kuhmonen
4
hm, das funktioniert bei mir nicht. Ich versuche, Hindi oder Koreanisch auszudrucken und habe kein Glück
Quincy
1
Möglicherweise müssen Sie die App neu starten, um den Effekt nach dem Wechsel zwischen Schriftarten zu sehen.
Mike Keskinov
2
@ Cel: Ich habe festgestellt, dass NSimSun für Chinesisch und Japanisch (sowie Englisch) funktioniert.
kjhughes
11

Ich habe auf MSDN eine elegante Lösung gefunden

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

Dieses einfache Programm schreibt ℃ direkt auf den Bildschirm.

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}
Destiner
quelle
2
Das ist wirklich ordentlich! Ich denke jedoch, dass die akzeptierte Antwort weiterhin gilt. Wenn die von der Konsole verwendete Schriftart keine Unicode-Zeichen unterstützt, funktioniert dieses Beispiel meines Erachtens nicht. Ich kann dies jedoch nicht überprüfen, da ich derzeit keinen Zugriff auf einen Windows-Computer habe.
Sam
Ja, ich glaube Sam ist richtig. Ich war zum Beispiel fest davon überzeugt, dass die Schriftarten der Eingabeaufforderung meinen Zeichensatz nicht unterstützten.
Veverke
8

Außerdem Console.OutputEncoding = System.Text.Encoding.UTF8;

Für einige Zeichen müssen Sie zusätzliche Schriftarten installieren (z. B. Chinesisch).

In Windows - 10 gehen zuerst Region & Spracheinstellungen und installieren Sie die Unterstützung für gewünschte Sprache: Geben Sie hier die Bildbeschreibung ein

Danach können Sie zu Eingabeaufforderungsproportionen (oder Standardeinstellungen, wenn Sie möchten ) gehen und eine Schriftart auswählen, die Ihre Sprache unterstützt (wie KaiTi im chinesischen Fall): Geben Sie hier die Bildbeschreibung ein

Jetzt können Sie loslegen: Geben Sie hier die Bildbeschreibung ein

watbywbarif
quelle
Vielen Dank. Das Ändern der Konsolenschrift ist das Update für mich :) (Setzen Sie auch die Konsole auf UTF-8)
Franva
0

Das funktioniert bei mir:

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

Um einige der Symbole anzuzeigen, muss die Schriftart der Eingabeaufforderung auf Lucida Console eingestellt werden:

  1. Eingabeaufforderung öffnen;

  2. Klicken Sie mit der rechten Maustaste auf die obere Leiste der Eingabeaufforderung.

  3. Klicken Sie auf Eigenschaften.

  4. Wenn die Schriftart auf Rasterschriftarten eingestellt ist, ändern Sie sie in Lucida Console.

თემო ნემსიწვერიძე
quelle