¿Cómo escribir caracteres Unicode en la consola?


150

Me preguntaba si era posible, en una aplicación de consola, escribir caracteres como usar .NET. Cuando trato de escribir este personaje, la consola muestra un signo de interrogación.

Respuestas:


201

Es probable que su codificación de salida esté establecida en ASCII. Intente usar esto antes de enviar la salida:

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

( Enlace de MSDN a la documentación de respaldo).

Y aquí hay una pequeña aplicación de prueba de consola que puede encontrar útil:

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

También es posible que su elección de fuente de consola no sea compatible con ese carácter en particular. Haga clic en el menú de la barra de herramientas de Windows (icono como C :.) y seleccione Propiedades -> Fuente. Pruebe algunas otras fuentes para ver si muestran su personaje correctamente:

imagen de la fuente de la consola editar


3
Console.OutputEncodingno se puede establecer en Encoding.Unicode(UTF-16). Encoding.UTF8Sin embargo, es posible.
Saeb Amini

3
En .NET 4.5 y
versiones

44
hm, esto no funciona para mí. Estoy tratando de imprimir hindi o coreano y no tuve suerte
Quincy

1
Es posible que deba reiniciar la aplicación para ver el efecto después de cambiar de fuente.
Mike Keskinov

2
@Cel: He descubierto que NSimSun funciona para chino y japonés (además de inglés).
kjhughes

11

Encontré una solución elegante en MSDN

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

Este sencillo programa escribe ℃ directamente en la pantalla.

using System;

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

2
Eso es realmente genial! Sin embargo, creo que la respuesta aceptada aún se aplica: si la fuente que usa la consola no admite caracteres Unicode, creo que este ejemplo no funcionará. Sin embargo, no puedo verificar eso, ya que no tengo acceso a una computadora con Windows en este momento.
Sam

Sí, creo que Sam tiene razón. Por ejemplo, estaba atrapado en el hecho de que las fuentes del símbolo del sistema no admitían mi juego de caracteres.
Veverke


8

Además Console.OutputEncoding = System.Text.Encoding.UTF8;

para algunos caracteres necesita instalar fuentes adicionales (es decir, chino).

En Windows 10, primero vaya a Configuración de región e idioma e instale soporte para el idioma requerido: ingrese la descripción de la imagen aquí

Después de eso, puede ir a Proportes del símbolo del sistema (o valores predeterminados si lo desea) y elegir alguna fuente que sea compatible con su idioma (como KaiTi en el caso chino): ingrese la descripción de la imagen aquí

Ahora estás listo para ir: ingrese la descripción de la imagen aquí


muchas gracias. Cambiar la fuente de la consola es la solución para mí :) (También configure la consola para usar UTF-8)
Franva

0

Esto funciona para mi:

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

Para mostrar algunos de los símbolos, es necesario configurar la fuente del símbolo del sistema en la consola de Lucida:

  1. Abrir símbolo del sistema;

  2. Haga clic derecho en la barra superior del símbolo del sistema;

  3. Haga clic en Propiedades;

  4. Si la fuente está configurada en Fuentes ráster, cámbiela a Lucida Console.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.