C #: Personagens não exibir bem quando em Console, por quê?
Pergunta
A figura abaixo explica tudo:
alt texto http://img133.imageshack.us/img133/4206/accentar9 .png
O textInput variável vem de File.ReadAllText(path);
e personagens como: 'ê ê ... não são exibidos. Quando eu executar o meu UnitTest, está tudo bem! Vejo-os ... Por quê?
Solução 3
Eu não sei por que ela funciona com NUnit, mas eu abrir o arquivo com o Notepad ++ e vejo ANSI no formato. Agora eu convertidos para UTF-8 e ele funciona.
Eu ainda estou querendo saber por que ele estava trabalhando com NUnit e não no console? mas pelo menos ele funciona agora.
Atualizar Eu não entendo por que eu descer votou sobre a questão e nesta resposta porque a questão ainda é bom, porque em um console não posso ler um arquivo ANSI mas em nUnit eu posso?
Outras dicas
As classes .NET (System.IO.StreamReader
e os gostos) tomar UTF-8 como a codificação padrão. Se você quiser ler uma codificação diferente você tem que passar isso explicitamente à sobrecarga de construtor apropriado.
Observe também que não há uma única codificação chamado de “ANSI”. Você provavelmente está se referindo a página de código 1252 do Windows aka “Europa Ocidental”. Observe que isso é diferente da codificação padrão do Windows em outros países. Isto é relevante quando você tentar usar System.Text.Encoding.Default
porque isso realmente difere de sistema para sistema.
/ EDIT: Parece que você mal compreendido tanto a minha resposta e meu comentário:
- O problema no seu código é que você precisa dizer .NET qual codificação você está usando.
- A outra observação, dizendo que “ANSI” pode se referir a diferentes codificações, não tem nada a ver com seu problema. Era apenas uma “pelo caminho” observação para evitar mal-entendidos (bem, que um tiro pela culatra).
Assim, finalmente: A solução para o seu problema deve ser o seguinte código:
string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));
A parte importante aqui é o uso de uma instância System.Text.Encoding
apropriada.
No entanto, isso pressupõe que a codificação é realmente o Windows-1252 (mas eu acredito que isso é o que significa Notepad ++ por “ANSI”). Eu não tenho idéia por que seu texto é exibido corretamente quando lido por NUnit. Suponho que NUnit ou tem algum tipo de autodescoberta para codificações de texto ou que NUnit usa alguns padrões estranhos (ou seja, não UTF-8).
Oh, e pela maneira: “ANSI” realmente se refere ao “American National Standards Institute”. Há um monte de completamente diferentes padrões que têm “ANSI”, como parte de seus nomes. Por exemplo, C ++ é (entre outros) também um padrão ANSI.
Apenas em alguns contextos É (imprecisamente) usado para se referir às codificações do Windows. Mas mesmo lá, como eu tentei explicar, ele geralmente não se refere a um específica codificação, mas sim a uma classe de codificações que o Windows usa como padrão para diferentes países. Um deles é o Windows-1252.
Tente configurar a página de código de saída do seu sessin console usando o chcp comando. As páginas de código suportadas pelo Windows são aqui , aqui , e aqui . Lembre-se, fundametnaly o console é bastante simples: ele exibe caracteres UNCICODE ou DBCS usando uma página de código para dtermine o glifo que será exibido.