Encodage utf8 c#

phenom2 Messages postés 3 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 mai 2011 - 24 mai 2011 à 21:56
phenom2 Messages postés 3 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 mai 2011 - 25 mai 2011 à 20:48
bonjour à tous,

j'éssaie d'afficher dans un datagrid un fichier csv de deux colonnes.

Le problème c'est qu'il me manque les caractères spéciaux qui s'affichent sous forme de rectangle.

En utilisant "UTF8Encoding.Default" le problème est résolu mais demeure quand j'utilise "Encoding.UTF8".
oui c'est génial sauf que j'ai lu qu'il fallait jamais et jamais utiliser "UTF8Encoding.Default".
l'auteur donne ce lien
[ne jamais utiliser UTF8Encoding.Default http://startbigthinksmall.wordpress.com/2009/01/20/utf8encodingdefault-encodingutf8-net-c/]

...
 using (StreamReader readFile = new StreamReader(filename, UTF8Encoding.Default))
                   // using (StreamReader readFile = new StreamReader(filename, Encoding.UTF8))
                {
                    string line;
         
                    DataRow dataRowcsv = null;
                    while ((line = readFile.ReadLine()) != null)
...

                    {


quelqu’un pourrait il m'expliquer... et me donner son avis sur cette affirmation ?
A voir également:

5 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
25 mai 2011 à 08:57
Salut,

de ce que j'ai compris le membre statique Default renvoie l'encoding par defaut de l'OS (celui du poste en winform, celui du serveur en webform) et ce, quelque soit la classe par laquelle tu passes (UTF8Encoding, ASCIIEncoding ...). On doit d'ailleurs pouvoir vérifier que :
	UTF8Encoding.Default == ASCIIEncoding.Default


Déjà on voit que ça peut porter à confusion (si on utilise ASCIIEncoding.Default et qu'on se retrouve avec de l'UTF8 par exemple). Et ça peut être source de bug à s'arracher les cheveux (tu déploies ton appli sur un poste/serveur qui n'a pas le même encodage par défaut, et tout redevient moche).

Voilà comment je vois le truc ;)
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
25 mai 2011 à 13:34
Hello,

Normalement, sur Windows le ***.Default doit retourner "Unicode".

Donc l'idéale est d'utiliser Encoding.Default




Sébastien FERRAND
Lead Developpeur
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
0
phenom2 Messages postés 3 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 mai 2011
25 mai 2011 à 14:03
merci pour la réponse,
en fait mon appli doit traduire des csv français en des langues différentes. La source sera toujours en français.

Mais j’enregistrerais en UTF8 pour le fichier traduit.
là je ne vois pas comment faire simple autrement. pour l'instant ça fonctionne...
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
25 mai 2011 à 16:12
ok... mais je te conseille de changer le UTF8Encoding.Default en Encoding.Default, sinon ça prête à confusion.


Sébastien FERRAND
Lead Developpeur
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phenom2 Messages postés 3 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 mai 2011
25 mai 2011 à 20:48
ok ! bref tout ça est encore un peu confut...

Si je comprends bien avec Encoding.Default le StreamReader utilise le décodeur par défaut de l'OS.

Si vous avez un bon lien très bien fait sur ces nuances d'encodage je suis preneur . Jusqu'a present
ce que j'ai lu n'a fait que m'embrouiller.
0
Rejoignez-nous