Comment écrire des caractères Unicode sur la console?

150

Je me demandais s'il était possible, dans une application console, d'écrire des caractères comme l' utilisation de .NET. Lorsque j'essaye d'écrire ce caractère, la console affiche un point d'interrogation.

Sam
la source

Réponses:

201

Il est probable que votre encodage de sortie soit défini sur ASCII. Essayez d'utiliser ceci avant d'envoyer la sortie:

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

( Lien MSDN vers la documentation de support.)

Et voici une petite application de test de console que vous trouverez peut-être 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

Il est également possible que votre choix de police de console ne prenne pas en charge ce caractère particulier. Cliquez sur le menu de la barre d'outils Windows (icône comme C :.) et sélectionnez Propriétés -> Police. Essayez d'autres polices pour voir si elles affichent correctement votre personnage:

image de la modification de la police de la console

Paul Sasik
la source
3
Console.OutputEncodingne peut pas être réglé sur Encoding.Unicode(UTF-16). Encoding.UTF8, cependant, est possible.
Saeb Amini
3
Dans .NET 4.5 et
versions
4
hm, cela ne fonctionne pas pour moi. J'essaie d'imprimer en hindi ou en coréen et pas de chance
Quincy
1
Vous devrez peut-être redémarrer l'application pour voir l'effet après avoir basculé entre les polices.
Mike Keskinov
2
@Cel: J'ai découvert que NSimSun fonctionne pour le chinois et le japonais (ainsi que pour l'anglais).
kjhughes
11

J'ai trouvé une solution élégante sur MSDN

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

Ce programme simple écrit ℃ directement sur l'écran.

using System;

public class Test
{
    public static void Main()
    {
        Console.Write('\u2103'); //℃ character code
    }
}
Destiner
la source
2
C'est vraiment chouette! Cependant, je pense que la réponse acceptée s'applique toujours - si la police utilisée par la console ne prend pas en charge les caractères Unicode, je pense que cet exemple ne fonctionnera pas. Cependant, je ne peux pas vérifier cela, car je n'ai pas accès à un ordinateur Windows pour le moment.
Sam
Oui, je pense que Sam a raison. Par exemple, j'étais coincé dans le fait que les polices d'invite de commande ne supportaient pas mon jeu de caractères.
Veverke
8

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

pour certains caractères, vous devez installer des polices supplémentaires (c'est-à-dire chinois).

Dans Windows 10, accédez d'abord aux paramètres de région et de langue et installez la prise en charge de la langue requise: entrez la description de l'image ici

Après cela, vous pouvez accéder aux proportions d'invite de commande (ou aux valeurs par défaut si vous le souhaitez) et choisir une police qui prend en charge votre langue (comme KaiTi en chinois): entrez la description de l'image ici

Vous êtes maintenant prêt à partir: entrez la description de l'image ici

watbywbarif
la source
Merci beaucoup. Changer la police de la console est le correctif pour moi :) (Également configurer la console pour utiliser UTF-8)
Franva
0

Cela fonctionne pour moi:

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

Pour afficher certains des symboles, il est nécessaire de définir la police de l'invite de commande sur Lucida Console:

  1. Ouvrez l'invite de commande;

  2. Cliquez avec le bouton droit sur la barre supérieure de l'invite de commande;

  3. Cliquez sur Propriétés;

  4. Si la police est définie sur Polices raster, remplacez-la par Lucida Console.

თემო ნემსიწვერიძე
la source