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ê?

Foi útil?

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:

  1. O problema no seu código é que você precisa dizer .NET qual codificação você está usando.
  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top