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 :

conversion UNICODE -> ASCII


Sujet :

C#

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut conversion UNICODE -> ASCII
    Bonjour,
    je dois réaliser une classe de récupération de divers fichiers textes de formats différents (CSV, txt, etc.) ... et surtout de pays différents (Europe Ouest / Latin), Grec, Cyrillique, etc. (Supplement 1, Extended A, Extended B, etc)

    J'envisageais donc de commencer par convertir les strings issues des fichiers reçus dont je ne connais pas à priori le codage lors de la réception en UNICODE en utilisant quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    Encoding srcEnc= Encoding.???;
                    Encoding dstEnc= Encoding.Unicode;
                    byte[] inter = Encoding.Convert(srcEnc, dstEnc, MyString);
    Mais justement, il faut connaître le codage source ???? comment faire alors ?

    Si par contre je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    System.Text.Encoding enc = System.Text.Encoding.UTF8;
                    string ToString = enc.GetString(MyString);
    je récupère biens tous les caractères, mais les caractères non-ASCII ne sont malgré tout pas traduits... ???

    Est-ce que la solution est de parcourir les string et de remplacer caractère par caractère "en "ce qu'on attend" ? Ce serait étonnant... je dois rater quelque chose !

    ma chaine de test est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private byte[] Nam = new byte[] { (byte)'\u00c5', (byte)'\u00c4', (byte)'\u00c6', (byte)'\u00cf', (byte)'\u0020', (byte)'\u0048', (byte)'\u0045'};
    avec la solution 2, j'obtiens : "���� HET" ???

    Merci.

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    il suffit d'utiliser l'UTF7 et ça fonctionne !

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut Afficher le Pi
    J'étais allé un peu vite dans mon raisonnement !
    en fait non ça ne fonctionne pas...

    Comment faire pour récupérer un texte codé en Cyrillique par exemple :
    caractères de \u0050-\u0525, \u2DE0-\u2DFF (Ext-A), \uA640-\uA697(Ext.B).

    Ou plus simplement comment afficher le Pi (\u03a0) par exemple ?

    L'exemple donné par MSDN ici ne fonctionnent pas !
    http://msdn.microsoft.com/fr-fr/libr....encoding.aspx
    car il donne le résultat suivant dans la console :
    Original string: This string contains the unicode character Pi(?)
    Ascii converted string: This string contains the unicode character Pi(?)
    En même temps en passant par un byte[] dans le code ça ne m'étonne pas vraiment ! puisque les bytes sont limités à 7F sauf erreur de ma part...

    Mais comment faire, car les Encoding ne laisse pas d'autre choix que de passer un paramètre byte[] dans tous les Getxxx, y compris pour le GetChars ?

    Merci d'avance pour votre aide....

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    J'ai essayé plus simplement avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [DllImport("kernel32.dll", SetLastError = true)]
    internal static extern bool SetConsoleCP(uint codePage);
     
    string unicodeString = "This string contains the unicode character Pi(\u03a0)";
    SetConsoleCP((uint)65000);
    Console.WriteLine("Ascii converted string: {0}", unicodeString);
    J'ai essayé avec diverses valeurs d'uint extraite de :
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

    et bien le résultat est toujours :
    Ascii converted string: This string contains the unicode character Pi(?)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 120
    Points : 48
    Points
    48
    Par défaut
    après de nombreuses recherches sur le Web.
    Il semble que la Console soit la fautive.

    Les bytes sont bien rangé dans le byte[] dans un ordre pf, PF qui permet de ne rien perdre du codage unicode.
    J'ai contrôlé sur unicodeBytes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] unicodeBytes = unicode.GetBytes(unicodeString);

  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
    je récupère biens tous les caractères, mais les caractères non-ASCII ne sont malgré tout pas traduits... ???
    Pour texte DOS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    StreamReader sr = new StreamReader("monFichier.txt",
       Encoding.GetEncoding("iso-8859-1")) ;

Discussions similaires

  1. Réponses: 13
    Dernier message: 16/09/2014, 12h59
  2. Conversions Unicode Ascii
    Par Klaim dans le forum C++
    Réponses: 25
    Dernier message: 01/08/2007, 22h15
  3. Conversion de chaine ASCII->Unicode
    Par zzorglub dans le forum C
    Réponses: 6
    Dernier message: 04/04/2007, 13h35
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. conversion Unicode -> ASCII
    Par juzam dans le forum C
    Réponses: 8
    Dernier message: 24/07/2003, 10h07

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