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 :

[encodage] validation utf8


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut [encodage] validation utf8
    Bonjour,

    J'ai un petit problème de parsing dû à l'encodage du texte, et j'essaie d'utiliser la glib pour palier à ça.

    Je précise que je souhaite avoir des string sous formats UTF8 (pour utilisation sous GTK)

    Je lis un fichier texte, et je teste s'il s'agit bien d'encodage UTF8 avec g_utf8_validate. Dans certains cas cette fonction me renvoie bien une valeur fausse, et je tente alors une conversion avec la méthode g_locale_to_utf8, mais qui échoue avec une erreur "invalid sequence of bytes"...

    J'imagine qu'il s'agit d'un encodage différent de celui de la locale, mais comment trouver l'encodage ? Il y a une méthode g_get_charset(mystring) qui devrait me renvoyer le charset utilisé, et je pourrais utiliser la méthode g_convert, mais comment trouver le charset qui correspond à l'encodage utf8 ?

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    en fait en imprimant le charset récupéré par get_charset, je récupère "UTF-8"

    pourtant le validate marche pas :s

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Je pense que ça doit venir d'une partie partielle de ton string qui n'est pas en utf-8, ou qui n'est en rien tout simplement.

    UTF-8 a un encodage assez rigoureux et peut invalider des seizet car il n'y a pas de seizet complémentaire tout en affichant le reste des caractères. Ceci rend invalide ton string et donc utf8_validate renverra faux. Ca n'est pas pour autant que le string ne prétend pas être encodé en utf8, d'où le charset qui te renvoi utf8.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    hmm je vois, il faut que je fasse une vérification caractère par caractère donc, et une conversion caractère par caractère... Je vais tenter ça alors, et je reviens pour commenter, merc

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    hmm, je ne vois pas trop comment faire...

    En somme, il y a des caractères (les caractères spéciaux) qui ne passent pas, le problème c'est que je n'arrive pas à les convertir, en effet les fonctions g_convert et locale_to_utf8 lèvent une exception sur ces caractères. J'ai essayé la conversion caractère par caractère mais ça ne marche pas

    Je crois comprendre qu'ils ne sont pas en utf8, donc comme la locale est en utf8, le convertisseur de locale_to_utf8 se dit "pas le bon type à convertir"... Comment connaitre le type de départ à convertir ?

    Pourtant ces caractères s'affichent bien dans un éditeur de texte classique...

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    après une petite vérification via l'éditeur de texte (que j'aurai dû faire dès le départ je l'avoue ) il s'avère que les caractères spéciaux qui échoue à la conversion sont en ISO-8859-1 ...

    donc mon problème est bien le suivant, comment définir l'encodage des caractères qui échouent à la validation utf8 afin de les convertir proprement ?

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    Je reviens fermer le sujet

    La solution trouvée est de tester différents encodages en raffinant, voire à tester charactères par charactères s'il y a un problème...

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

Discussions similaires

  1. [Encodage] Encodage fichier UTF8
    Par mcdelay dans le forum Langage
    Réponses: 2
    Dernier message: 30/10/2014, 14h30
  2. Réponses: 7
    Dernier message: 12/03/2014, 12h38
  3. Encodage unicode UTF8
    Par yaya0057 dans le forum Jasper
    Réponses: 1
    Dernier message: 23/02/2010, 01h21
  4. Problème d'encodage LATIN - UTF8
    Par coeurdange dans le forum Langage
    Réponses: 3
    Dernier message: 22/07/2008, 13h11

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