Comment lire un fichier encodé en ANSI contenant des caractères spéciaux
Je suis en train d'écrire un TFS Checkin politique, qui vérifie si notre source, les fichiers contenant notre fichier d'en-tête.
Mon problème, c'est que notre fichier d'en-tête contient un caractère spécial "©" et, malheureusement, certains de nos fichiers source sont encodés en ANSI.
Donc si j'ai lu ces fichiers dans la politique, la chaîne ressemble à ce "droit d'Auteur � 2009".
string content = File.ReadAllText(pendingChange.LocalItem);
J'ai fatigué de modifier le codage de la chaîne, mais ça n'aide pas. Alors, comment puis-je lire ces fichiers, que je reçois la chaîne correcte "Copyright © 2009"?
Merci pour l'aide!
Ce Qui Concerne Eny
- êtes-vous toujours en utilisant des en-têtes de fichier? Ils semblent de peu de valeur...
- Que recommanderiez-vous au lieu de transporter les informations de copyright dans le code source?
- Ce n'est pas à nous de décider, c'est la politique de l'entreprise.
Vous devez vous connecter pour publier un commentaire.
Utilisation
Encoding.Default
:Vous devez être conscient, cependant, que le lit à l'aide du système de codage par défaut - ce qui peut ne pas être le même que l'encodage du fichier. Il n'y a pas d'encodage unique appelé ANSI, mais généralement quand les gens parlent de "l'encodage ANSI" ils signifient Windows Page de Code 1252 ou quelle que soit leur zone arrive à utiliser.
Votre code sera plus solide si vous pouvez trouver la exacte encodage utilisé.
Il semble raisonnable, si vous allez avoir de telles politiques que vous aussi, vous avez de l'équipe ont convenu de la norme d'encodage. Pour être honnête, je ne vois pas pourquoi n'importe quelle équipe serait d'utiliser un encodage autre que "Unicode (UtF-8 avec signature) - page de Codes 65001" (sauf peut-être pour ASPX pages avec un taux important de non-latine du contenu statique, mais même alors, je ne vois pas comment ce serait un gros problème pour utiliser UTF-8).
En supposant que vous voulez toujours de permettre le mélange des codages puis vous avez ensuite besoin d'un moyen de déterminer l'encodage d'un fichier a enregistrer dans de sorte que vous savez quel encodage passer à
ReadAllText
. Ce n'est pas facile à déterminer à partir du fichier cependant, l'utilisation deEncoding.Default
est susceptible de travailler sur ok. Depuis sa plus probablement, vous avez juste 2 encodages à traiter avec, la VS (UTF-8 avec signature) et une commune de l'encodage ANSI utilisé par vous machines (probablement Windows-1252).Donc à l'aide de
fonctionne. (Comme je vois que Jon a déjà posté). Cela fonctionne car lorsque l'UTF-8 BOM (qui est ce que VS désigne par le terme "signature") est présent au début du fichier fourni encodage paramètre est ignoré et l'UTF-8 est utilisé de toute façon. Donc où est enregistré le fichier en UTF-8, vous obtenez des résultats corrects et où ANSI est utilisé, vous êtes plus susceptibles également d'obtenir des résultats corrects.
BTW, si vous êtes de traitement des en-têtes de fichier ne serait pas
ReadAllLines
rendre les choses plus faciles?.