IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Lecture et conversion utf8 en ASCII


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Lecture et conversion utf8 en ASCII
    Bonjour

    Pour lire un fichier texte j'ai l'habitude de faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          StreamReader F_IN = new StreamReader(Prm.InpFile,Encoding.Default);
          while ((bus = F_IN.ReadLine()) != null)
          {
          }
    Mais je realise que les chaines contenant de l'UTF8 restent en UTF8

    Quelle est la bonne méthode pour recuperer une chaine ASCII sachant qu'il s'agit essentiellement de caracteres latin
    Les methodes de conversion semblent tellement nombreuses que je prefere me fier a l'expèrience des autres avant de les essayer toutes pour trouver la bonne
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Salut

    Je pense que tu trouvera ta réponse avec System.Text.Encoding
    voir cet article sur msdn
    Encoding Class

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Pasquall

    Cet article me permet de voir que AsciiEncoding est tout a fait inaproprié pour les caracteres Latin

    The ASCIIEncoding class encodes Unicode characters as single 7-bit ASCII characters. This encoding only supports character values between U+0000 and U+007F.
    Ce que je cherche c'est d'avoir les accentués encodés sur sur un byte de 8 bit (valeurs 0-255) comme au bon vieux temps de ANSI et pas en trois bytes utf8
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Je continue a chercher mais je poste ici ces liens fort amusants


    http://www.yoda.arachsys.com/csharp/unicode.html

    http://www.joelonsoftware.com/articles/Unicode.html

    Et extrait fort pitoresque

    So I have an announcement to make: if you are a programmer working in 2003 and you don't know the basics of characters, character sets, encodings, and Unicode, and I catch you, I'm going to punish you by making you peel onions for 6 months in a submarine. I swear I will.


    Donc en definitive je pense que c'est une conversion utf-8 -> UCS-2 que je cherche
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Pour illustrer le problème

    Je voudrais pouvoir convertir ceci
    Blv de la 2 ème Armée Britanique N° 140
    En ceci
    Blv de la 2 ème Armée Britanique N° 140
    C'est a dire qu'en C# je puisse par exemple faire

    mot.Equals("Armée");
    et non

    mot.Equals("Armée");
    En definitive je ne suis pas parvenu a convertir les chaines apres lecture mais j'ai contourné en ouvrant le StreamReader avec un encoding UTF8 et en ouvrant le StreamWriter avec un encoding Default

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          StreamReader F_IN = new StreamReader(Prm.InpFile,Encoding.UTF8);
          StreamWriter f_out = new StreamWriter(Path.ChangeExtension(Prm.OutFile, "fmt"),false,Encoding.Default);
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Quelle est la bonne méthode pour recuperer une chaine ASCII sachant qu'il s'agit essentiellement de caracteres latin
    Je ne suis pas de répondre exactement à la question, mais pour lire des caractères accentués classiques DOS, on utilisera un StreamReader en spécifiant comme paramètre d'encoding :
    System.Text.Encoding.GetEncoding("ISO-8859-1")
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Grafito

    Ta proposition est effectivement la bonne
    Sauf que dans ce cas ci je devais lire des chaines codées UTF8 et ecrire des chaines codéées en standard

    Mes tentative de convertir APRES lecture en ayant utilisé un Encoding.Default pour le Streamreader n'ont rien donné de concluant.
    Et les methodes a utiliser sont absolument obscures
    Rien que le fait d'essayer de convertir un string en Byte[] afin de le passer a une methode Convert est un parcours de combattant

    Sans compter le le covert rends un Byte[] qu'il faut ensuite reconvertir en string !

    Ca ma donné des chaines en caractere chinois ou lémurien, je ne sais plus mais j'ai finis par laisser ce paquet d'ennui dans le coté sombre de l'inconnu en attente

    N.B. Ces manipulations sont vraiment source d'ennui nombreux car le fichier exporté d'une DB que j'avais a traiter était lui meme truffé de caractéres dans des encodage différents. Ce qui signifie que la lecture UTF8 avait correctement interpreté +/- 80% des caractéres accentuée mais il me restait en core une petite proportion de "é"résiduels que j'ai remplacé explicitement a coup de replace
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion UTF8 et utilisation de WideCharToMultiByte()
    Par Frank38 dans le forum Visual C++
    Réponses: 5
    Dernier message: 30/09/2008, 14h25
  2. Conversion de chaine ASCII->Unicode
    Par zzorglub dans le forum C
    Réponses: 6
    Dernier message: 04/04/2007, 13h35
  3. Lecture ou conversion en fichier d'un vecteur binaire
    Par Armitage1982 dans le forum SL & STL
    Réponses: 3
    Dernier message: 21/12/2006, 23h46
  4. Conversion hexadécimal en ascii
    Par andrianiaina dans le forum C
    Réponses: 12
    Dernier message: 08/08/2006, 07h21
  5. conversion UTF8 vers ASCII en C
    Par znarf dans le forum C
    Réponses: 2
    Dernier message: 05/07/2006, 13h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo