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.