Pergunta

Eu estou escrevendo uma política TFS Checkin, que verifica se os nossos arquivos de origem contendo o nosso cabeçalho do arquivo.

Meu problema é que o nosso cabeçalho do arquivo contém um caractere especial "©" e, infelizmente, alguns de nossos arquivos de origem são codificados em ANSI. Então, se eu ler esses arquivos na política, os olhares de cordas como este "Copyright 2009".

string content = File.ReadAllText(pendingChange.LocalItem);

Eu cansei de alterar a codificação da cadeia, mas isso não ajuda. Então, como posso ler esses arquivos, que eu obter a seqüência correta "de Copyright © 2009"?

Obrigado pela ajuda!

Saudações Eny

Foi útil?

Solução

Use Encoding.Default:

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

Você deve estar ciente, no entanto, que que lê-lo usando a codificação padrão do sistema - o que pode não ser o mesmo que a codificação do arquivo. Não há nenhuma única codificação chamado ANSI, mas normalmente , quando as pessoas falam sobre "a codificação ANSI" que significa o Windows página de código 1252 ou qualquer que seja sua caixa acontece de uso.

O seu código será mais robusto se você pode descobrir o exata de codificação usado.

Outras dicas

Parece sensato, se você vai ter essas políticas que você também teria equipe concordou codificação padrão. Para ser honesto, eu não posso ver por que qualquer equipe poderia usar uma outra codificação de "Unicode (UTF-8 com assinatura) - Codepage 65001" (exceto talvez para páginas ASPX com conteúdo significativo estática não-latino, mas mesmo assim eu posso' t ver como ele seria um grande negócio para uso UTF-8).

Supondo que você ainda deseja permitir codificações mistas então você próximo precisa encontrar uma maneira para determinar qual codificação de um arquivo foi salvo em que você saiba qual codificação para passar para ReadAllText. A sua não é fácil de determinar isso a partir do arquivo porém utilizando Encoding.Default é provável que ok trabalho. Desde a sua mais provável que você tem apenas 2 codificações para lidar com, o VS (UTF-8 com assinatura) e um ANSI comum de codificação usado por você máquinas (provavelmente do Windows-1252).

Por isso usando

 string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

vai funcionar. (Como eu ver Jon já postou). Isso funciona porque quando o UTF-8 BOM (que é o que significa VS pelo termo "assinatura") está presente no início do arquivo do parâmetro de codificação fornecido é ignorado e UTF-8 é usado de qualquer maneira. Daí onde o arquivo é salvo usando UTF-8 que você obtenha resultados corretos e onde ANSI é usado você é mais provável também para obter resultados corretos.

BTW, se você está processando cabeçalhos de arquivo não iria ReadAllLines facilitar as coisas?.

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