Question

La photo ci-dessous explique tout:

texte de remplacement http://img133.imageshack.us/img133/4206/accentar9 .png

La variable textInput provient de File.ReadAllText (path); et de caractères tels que: '& # 233; & # 232; ... ne pas afficher. Quand je lance mon UnitTest, tout va bien! Je les vois ... Pourquoi?

Était-ce utile?

La solution 3

Je ne sais pas pourquoi cela fonctionne avec NUnit, mais j'ouvre le fichier avec NotePad ++ et je vois ANSI au format. Maintenant, je me suis converti au format UTF-8 et cela fonctionne.

Je me demande toujours pourquoi cela fonctionnait avec NUnit et non dans la console? mais au moins cela fonctionne maintenant.

Mettre à jour Je ne comprends pas pourquoi j'ai voté sur la question et sur cette réponse parce que la question est toujours bonne. Pourquoi dans une console, je ne peux pas lire un fichier ANSI, mais je peux le faire avec NUNit?

Autres conseils

Les classes .NET ( System.IO.StreamReader et similaires) prennent UTF-8 comme codage par défaut. Si vous souhaitez lire un codage différent, vous devez le transmettre explicitement à la surcharge de constructeur appropriée.

Notez également qu’il n’existe pas un seul codage appelé «ANSI». Vous faites probablement référence à la page de code Windows 1252, également appelée «Europe occidentale». Notez que cela diffère du codage Windows par défaut dans d’autres pays. Ceci est pertinent lorsque vous essayez d'utiliser System.Text.Encoding.Default , car il diffère d'un système à l'autre.

/ EDIT: Vous semblez avoir mal compris ma réponse et mon commentaire:

  1. Le problème dans votre code est que vous devez dire à .NET quel encodage vous utilisez.
  2. L'autre remarque, selon laquelle "ANSI" peut faire référence à des codages différents , n'a rien à voir avec votre problème. C'était juste une remarque "à propos" pour éviter les malentendus (enfin, celui-ci s'est retourné contre nous).

Donc, enfin: la solution à votre problème devrait être le code suivant:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

La partie importante ici est l'utilisation d'une instance appropriée de System.Text.Encoding .

Cependant, cela suppose que votre encodage est bien Windows-1252 (mais je crois que c'est ce que Notepad ++ veut dire par “ANSI”). Je ne sais pas pourquoi votre texte s’affiche correctement lorsqu’il est lu par NUnit. Je suppose que NUnit dispose d’une sorte de découverte automatique pour les codages de texte ou que NUnit utilise des valeurs par défaut étranges (c’est-à-dire pas UTF-8).

Oh, et d'ailleurs: "ANSI" fait vraiment référence à "American National Standards Institute". Il y a beaucoup de normes complètement différentes qui ont «ANSI» dans leurs noms. Par exemple, C ++ est (entre autres) également une norme ANSI.

Ce n'est que dans certains contextes qu'il est utilisé (de manière imprécise) pour faire référence aux codages Windows. Mais même là, comme j'ai essayé de l'expliquer, il ne s'agit généralement pas d'un encodage spécifique , mais plutôt d'une classe d'encodages que Windows utilise par défaut pour différents pays. Windows 1252 en fait partie.

Essayez de définir la page de code de sortie de votre console sessin à l’aide du chcp . commander. Les pages de code prises en charge par Windows sont ici , ici et ici . Rappelez-vous, fondamentalement, la console est assez simple: elle affiche des caractères UNCICODE ou DBCS en utilisant une page de code pour déterminer le glyphe qui sera affiché.

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