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

Langage C++ Discussion :

Réinterpréter le 'code source' de caractères spéciaux


Sujet :

Langage C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1
    Par défaut Réinterpréter le 'code source' de caractères spéciaux
    Bonjour,
    je cherche à parser (en c++, sous Windows) un document rdf-xml (encodé en UTF-8) grâce à la librairie Raptor RDF.
    Tout se passe bien à l'exception des caractères spéciaux qui me sont renvoyés non-interprétés.
    Par exemple si le parser trouve la valeur littérale
    blaµbla
    , il renvoi une chaîne contenant :
    "bla\u00B5bla"
    (les doubles quotes ne sont pas une erreur, la chaîne renvoyée est bien entourée par le caractère ' " ').
    Je me retrouve donc avec une chaîne correcte, mais non interprétée. En effet si j'écris dans mon code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string test("bla\u00B5bla"); printf(test.c_str());
    la sortie sera bien :
    blaµbla
    Pour être bien clair, si je devais reconstruire moi-même la chaîne renvoyée par le parser Raptor, je devrais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     std::string test("\"bla\\u00B5bla\""); printf(test.c_str());
    et la sortie serait :
    "bla\u00B5bla"
    La question est donc : comment réinterpréter les caractères spéciaux dans une chaîne de caractères ?
    J'ai pas mal cherché mais je n'arrive à rien, un coup de main me serait vraiment utile ici, merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Par défaut
    Salut,

    Je ne sais pas si cela existe dans cette librarie, mais il te faut peut-etre chercher a recuperer le code unicode de ton caractere, puis recuperer le caractere correspondant.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Retrouver la valeur, ça ne semble pas bien compliqué: Les séquences d'échappement en \u ont l'avantage d'avoir une longueur fixe de 4 chiffres hexadécimaux, c'est assez facile à interpréter.

    Là, ou ça peut devenir compliqué, c'est que le document UTF-8 supporte (au moins) tous les caractères du Basic Multilingual Plane), et ta std::string utilise des caractères "minces".
    Tu vas donc devoir agir différemment selon l'encodage que tu veux lui donner:
    • Si elle doit être en UTF-8, tu devras décomposer les code points supérieurs à 127 obtenu en deux char ou plus.
    • Si elle doit être en ISO 8859-1, tu vas devoir refuser/ignorer/remplacer les code points supérieurs à 255.
    • Si elle doit être dans un encodage ASCII étendu autre que ISO 8859-1 (Par exemple Windows CP1252, l'encodage par défaut de Windows en Occident), que faire? Tu n'as aucun moyen simple de savoir si un code point est supporté par ledit encodage... (mais tu as des moyens compliqués, comme utiliser une bibliothèque ou les fonctions de l'API Win32)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Code VBA pour caractéres spéciaux
    Par buddyMick dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/09/2010, 12h34
  2. Réponses: 8
    Dernier message: 15/07/2006, 18h59
  3. [Win32][D7] Convertir caractères spéciaux en code URL (HTML)
    Par Benjamin GAGNEUX dans le forum Delphi
    Réponses: 7
    Dernier message: 17/05/2006, 15h13
  4. Réponses: 4
    Dernier message: 28/01/2006, 20h03
  5. Affichage de caractère spéciaux absent dans le code source
    Par HNT dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 03/11/2005, 22h38

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