Question

J'écris une politique TFS Checkin, qui vérifie si nos fichiers source contiennent notre en-tête de fichier.

Mon problème est que notre en-tête de fichier contient un caractère spécial "©" " et malheureusement, certains de nos fichiers sources sont encodés en ANSI. Par conséquent, si je lis ces fichiers dans la stratégie, la chaîne ressemble à ceci "Copyright & # 65533; 2009 ".

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

Je me suis fatigué de changer l'encodage de la chaîne, mais cela n'aide pas. Alors, comment puis-je lire ces fichiers et obtenir la chaîne correcte "Copyright © 2009"?

Merci pour votre aide!

Cordialement Eny

Était-ce utile?

La solution

Utiliser Encoding.Default :

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

Vous devez savoir, cependant, que cela le lit en utilisant le codage par défaut du système, qui peut ne pas être identique au codage du fichier. Il n’existe pas de codage unique appelé ANSI, mais habituellement lorsque l’on parle de "codage ANSI". ils désignent le code Windows ou tout ce que leur ordinateur utilise.

Votre code sera plus robuste si vous pouvez connaître le codage exact utilisé.

Autres conseils

Il semblerait judicieux, si vous avez de telles politiques, que vous ayez également l’encodage standard convenu par l’équipe. Pour être honnête, je ne vois pas pourquoi une équipe utiliserait un codage autre que "Unicode (UtF-8 avec signature) - Codepage 65001" (sauf peut-être pour les pages ASPX avec un contenu statique non latin significatif, mais je ne vois même pas en quoi ce serait un gros problème d’utiliser UTF-8).

En supposant que vous souhaitiez toujours autoriser des codages mixtes, vous devez ensuite trouver un moyen de déterminer le codage dans lequel un fichier a été enregistré afin de savoir quel codage doit être transmis à ReadAllText . Ce n’est pas facile à déterminer à partir du fichier, cependant, utiliser Encoding.Default fonctionnera probablement correctement. Comme il est fort probable que vous n’ayez à traiter que 2 encodages, le VS (UTF-8 avec signature) et un encodage ANSI commun utilisé par vos machines (probablement Windows-1252).

Par conséquent, en utilisant

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

travaillera. (Comme je vois Jon a déjà posté). Cela fonctionne parce que lorsque la nomenclature UTF-8 (ce que VS désigne par le terme "signature") est présente au début du fichier, le paramètre de codage fourni est ignoré et UTF-8 est utilisé de toute façon. Par conséquent, lorsque le fichier est enregistré avec UTF-8, vous obtenez des résultats corrects et lorsque ANSI est utilisé, vous obtiendrez probablement également des résultats corrects.

BTW, si vous traitez les en-têtes de fichier, ReadAllLines ne simplifierait-il pas les choses?.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top