problema StreamReader - codificação de arquivo desconhecido (iso ocidental 88591)

votos
2

Ao ler dados a partir do arquivo de entrada notei que o symbom ¥ não estava sendo lido pelo StreamReader. Mozilla Firefox mostrou que o tipo de ficheiro de entrada como Ocidental (ISO-8859-1).

Depois de brincar com os parâmetros de codificação eu achei que funcionou com sucesso para os seguintes valores:

System.Text.Encoding.GetEncoding(1252) // (western iso 88591)

System.Text.Encoding.Default 

System.Text.Encoding.UTF7

Agora estou pensando em usar a configuração Default, porém eu não estou muito certo se esta é a decisão certa. O código existente não usar qualquer codificação e eu estou preocupado que eu poderia quebrar alguma coisa.

Eu sei muito pouco (ou melhor, nada) sobre codificação. Como posso fazer isso? É a minha decisão de usar System.Text.Encoding.Default seguro? Eu deveria estar pedindo ao usuário para salvar os arquivos em um formato específico?

Publicado 16/12/2008 em 10:29
fonte usuário
Em outras línguas...                            


3 respostas

votos
3

Página de código 1252 não é exatamente o mesmo que ISO-Latin-1. Se você quiser ISO-Latin-1, use Encoding.GetEncoding(28591). No entanto, eu esperaria que ser o mesmo para este ponto de código (U + 00A5). UTF-7 é completamente diferente (e quase nunca o que você quer usar).

Encoding.Defaulté não segura - é uma péssima idéia na maioria das situações. É específico para o computador específico que está sendo executado. Se você transferir um arquivo de um computador para outro, quem sabe o que codifica a computador original estava usando?

Se você sabe que seu arquivo está em ISO-8859-1, em seguida, usar explicitamente isso. O que está produzindo esses arquivos? Se eles estão apenas sendo salvos pelo usuário, o programa que eles estão sendo salvos em? Se UTF-8 é uma opção, que é um bom - em parte porque ela pode lidar com toda a Unicode.

Eu tenho um artigo sobre Unicode e outro sobre depurar problemas Unicode que podem lhe ser úteis.

Respondeu 16/12/2008 em 10:39
fonte usuário

votos
2

O código existente não usar qualquer codificação

Pode não ter especificado explicitamente a codificação, caso em que a codificação provavelmente padrão para Encoding.UTF8.

O nome Encoding.Default pode dar a impressão de que esta é a codificação padrão usada por classes, tais como StreamReader, mas este não é o caso: Como Jon Skeet apontou, Encoding.Default é a codificação de página de código ANSI atual do sistema operacional.

Pessoalmente acho que isso faz com que o nome da propriedade Encoding.Default um pouco enganador.

Respondeu 16/12/2008 em 11:04
fonte usuário

Respondeu 16/12/2008 em 11:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more