Como escrever caracteres Unicode no console?


150

Eu queria saber se era possível, em um aplicativo de console, escrever caracteres como o .NET. Quando tento escrever esse caractere, o console gera um ponto de interrogação.

Respostas:


201

É provável que sua codificação de saída esteja definida como ASCII. Tente usar isso antes de enviar a saída:

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

( Link MSDN para documentação de suporte.)

E aqui está um pequeno aplicativo de teste de console que você pode achar ú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

Também é possível que sua escolha da fonte do console não suporte esse caractere específico. Clique no menu da barra de ferramentas do Windows (ícone como C :.) e selecione Propriedades -> Fonte. Tente outras fontes para ver se elas exibem seu personagem corretamente:

imagem da fonte do console editar


3
Console.OutputEncodingnão pode ser definido como Encoding.Unicode(UTF-16). Encoding.UTF8, no entanto, é possível.
Saeb Amini

3
Em .NET 4,5 e mais tarde também UTF-16 é apoiada
Sami Kuhmonen

4
hm, isso não funciona para mim. Eu estou tentando imprimir hindi ou coreano e sem sorte
Quincy

1
Pode ser necessário reiniciar o aplicativo para ter efeito após alternar entre as fontes.
Mike Keskinov 17/02/2015

2
@ Cel: Descobri que o NSimSun funciona para chinês e japonês (além de inglês).
Kjhughes #

11

Encontrei uma solução elegante no MSDN

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

Este programa simples grava ℃ diretamente na tela.

using System;

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

2
Isso é realmente legal! No entanto, acho que a resposta aceita ainda se aplica - se a fonte que o console estiver usando não suportar caracteres unicode, acredito que este exemplo não funcionará. Não posso verificar isso, no entanto, como não tenho acesso a um computador com Windows no momento.
Sam

Sim, acredito que Sam esteja correto. Por exemplo, fiquei preso no fato de que as fontes do prompt de comando não suportavam meu conjunto de caracteres.
Versão #


8

Além de Console.OutputEncoding = System.Text.Encoding.UTF8;

para alguns caracteres, você precisa instalar fontes extras (por exemplo, chinês).

No Windows 10, vá primeiro para as configurações de região e idioma e instale o suporte para o idioma necessário: insira a descrição da imagem aqui

Depois disso, você pode ir para Proporties de Prompt de Comando (ou Padrões, se desejar) e escolher alguma fonte que suporte seu idioma (como o KaiTi no caso chinês): insira a descrição da imagem aqui

Agora você está pronto para ir: insira a descrição da imagem aqui


Muito obrigado. Alterar a fonte do console é a correção para mim :) (Também configure o console para uso UTF-8)
Franva

0

Isso funciona para mim:

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

Para exibir alguns dos símbolos, é necessário definir a fonte do prompt de comando como Lucida Console:

  1. Prompt de Comando Aberto;

  2. Clique com o botão direito do mouse na barra superior do prompt de comando;

  3. Clique em Propriedades;

  4. Se a fonte estiver definida como Fontes de varredura, altere-a para Lucida Console.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.