Come scrivere i caratteri Unicode sulla console?


150

Mi chiedevo se fosse possibile, in un'applicazione console, scrivere personaggi come usare .NET. Quando provo a scrivere questo personaggio, la console emette un punto interrogativo.

Risposte:


201

È probabile che la codifica di output sia impostata su ASCII. Prova a usarlo prima di inviare l'output:

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

( Collegamento MSDN alla documentazione di supporto.)

Ed ecco una piccola app di test della console che potresti trovare utile:

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

È anche possibile che la scelta del tipo di carattere Console non supporti quel particolare carattere. Fai clic sul menu della barra degli strumenti di Windows (icona come C :.) e seleziona Proprietà -> Carattere. Prova alcuni altri caratteri per vedere se visualizzano correttamente il tuo personaggio:

foto di modifica del font della console


3
Console.OutputEncodingnon può essere impostato su Encoding.Unicode(UTF-16). Encoding.UTF8, tuttavia, è possibile.
Saeb Amini,

3
In .NET 4.5 e
versioni

4
hm, questo non funziona per me. Sto cercando di stampare hindi o coreano e senza fortuna
Quincy,

1
Potrebbe essere necessario riavviare l'app per vedere l'effetto dopo il passaggio da un carattere all'altro.
Mike Keskinov,

2
@Cel: ho scoperto che NSimSun funziona per cinese e giapponese (oltre che per l'inglese).
kjhughes,

11

Ho trovato una soluzione elegante su MSDN

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

Questo semplice programma scrive ℃ direttamente sullo schermo.

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}

2
È davvero pulito! Tuttavia, penso che la risposta accettata sia ancora valida: se il carattere utilizzato dalla console non supporta i caratteri Unicode, credo che questo esempio non funzionerà. Non posso verificarlo, tuttavia, poiché al momento non ho accesso a un computer Windows.
Sam

Sì, credo che Sam abbia ragione. Ad esempio, ero bloccato nel fatto che i caratteri del prompt dei comandi non supportavano il mio set di caratteri.
Veverke,


8

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

per alcuni personaggi è necessario installare caratteri aggiuntivi (ad es. cinese).

In Windows 10 vai prima alle impostazioni di Regione e lingua e installa il supporto per la lingua richiesta: inserisci qui la descrizione dell'immagine

Dopodiché puoi andare su Proporzioni prompt dei comandi (o Predefiniti se vuoi) e scegliere un font che supporti la tua lingua (come KaiTi nel caso cinese): inserisci qui la descrizione dell'immagine

Ora sei pronto per partire: inserisci qui la descrizione dell'immagine


molte grazie. Cambia il carattere della console è la soluzione per me :) (Imposta anche la console per utilizzare UTF-8)
Franva

0

Questo funziona per me:

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

Per visualizzare alcuni dei simboli, è necessario impostare il carattere del Prompt dei comandi su Lucida Console:

  1. Apri prompt dei comandi;

  2. Fare clic con il tasto destro sulla barra superiore del Prompt dei comandi;

  3. Clicca Proprietà;

  4. Se il carattere è impostato su Caratteri raster, cambiarlo in Lucida Console.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.