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

XML Discussion :

Lire un fichier encodé en UNICODE


Sujet :

XML

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Points : 42
    Points
    42
    Par défaut Lire un fichier encodé en UNICODE
    Bonjour a tous!

    Voici mon probleme:

    Je suis en train de creer un parser XML, celui ci fonctionne bien jusqu'à present.

    Pour la suite de mon projet j'ai des fichiers de dialogues en plusieurs langues dont le japonais. Vous vous doutez que mon parser ne fonctionne pas avec l'unicode. J'utilise le standard string du c++ et je souhaite que mon code soit le plus possible portable (Windows / Linux / Mac).

    Mes questions sont les suivantes:

    De quelle maniere puis je lire des fichiers en UNICODE en C++ ?
    Est ce possible de reconnaitre l'encodage des fichiers ?

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Houla, ecrire un parser XML, c'est reinventer la roue... Enfin, bon, qq petits trucs a savoir:

    1. En XML, l'encodage est normalement specifié dans l'entete:
    <?xml version="1.0" encoding="xxxxxxxx"?>
    Qaund ce n'est pas spécifié, on assume ce qu'on veut (generalement utf-8)

    2. si tes fichiers sont en japonais, il y a des chances qu'ils soient encodés en SHIFTJIS et pas en UNICODE... donc prudence....

    3. Il y a plusieurs format unicode: UTF-8, UTF-16, ... et pleins d'autres


    Donc pour toutes ces raisons, je te conseillerai:

    A. De prendre un parser XML existant qui gere les encoding (libxml)

    B. De convertir tous tes fichiers en UTF-16 (avec iconv) et d'utiliser les fonctions widestring (wchar_t, getwc, ...) dans ton parser.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup cependant le produit final pourrait être open source , je n'aurais pas de probleme avec libxml ?

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    libxml est dispo sous la licence MIT qui est vraiment super permissive.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Je crains qu'il n'y aie problème supplémentaire si tu veux manipuler de l'unicode en C++ standard de façon portable.
    La seule classe qui pourrait être utilisée pour en faire est wstring (typedef de basic_string) mais même le comité de normalisation reconnait qu'elle n'est pas suffisante (cf cet article). Il faudra donc mieux te tourner vers une autre biblio, genre ICU (probablement fort complexe mais je n'en connais pas d'autres).

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup pour votre aide je vais voir ce que je peux faire avec vos informations

    encore merci

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Salut loman02

    J'ai un peu le même souci que toi.
    En effet je voudrais que mon programme C++ (plateforme Linux) puisse gérer tous les alphabets. Mon programme récupère les mails sur des serveurs de mails, et il faut que ça puisse gérer les mails d'un chinois par exemple, et ne pas afficher des caractères tous bizarres.

    J'utilisais jusqu'à présent les string du C++, et j'ai beau avoir fait des tonnes de recherches à ce sujet, je n'arrive pas à voir exactement quel type je dois utiliser.

    Est-ce que tu as trouvé une solution à ton problème, qui pourrait résoudre le mien ?

    Merci par avance à tous ceux qui me consacreront du temps

    Rose

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Je pense que la ton problème n'est pas seulement de manipuler de l'unicode mais aussi de l'afficher. Et pour ça il faut utiliser une biblio d'affichage qui puisse les gérer, toutes les plus grosses le font (wxWidgets, Qt, gtk, mfc,...). Donc ça dépendra surtout de la biblio que tu utilises. Si tu fais de la ligne de commande, je suis même pas sur qu'elle puisse afficher des caractères chinois.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    De plus, il me semble que les streams C++ ne marchent pas en unicode (même les streams unicode convertissent en ASCII étendu avant d'écrire dans le fichier) mais cela doit dépendre de certaines implémentations.
    Ou bien, il faut spécifier l'encodage en ouvrant le fichier...

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponses, et désolée de ne pas avoir donné suite rapidement.

    Le problème n'est pas l'affichage de ces caractères, mais l'insertion de ceux-ci dans une base MySql, pourtant totalement encodée en utf-8, ainsi que le serveur sur lequel je travaille.

    Mais ce qui est bizarre, c'est que depuis le changement d'interclassement de la base de latin1... à utf-8, meme les accents posent problèmes.
    Par exemple, si j'insère depuis mon programme le texte:
    hihihéhé
    Sera effectivement inséré dans la base :
    hihih

    C'est vraiment très bizarre, et j'ai du mal à comprendre ce que je dois faire exacement !

    Merci beaucoup de votre aide

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

Discussions similaires

  1. Windows - Lire les fichiers encodés UTF8
    Par habike dans le forum Windows
    Réponses: 0
    Dernier message: 30/03/2015, 15h32
  2. lire un fichier en unicode
    Par kha_yassine dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/06/2007, 18h13
  3. Lecture fichier encodé Unicode
    Par iuchiban dans le forum Ruby
    Réponses: 1
    Dernier message: 29/03/2007, 14h33
  4. Déterminer si un fichier est encodé en unicode
    Par Golzinne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/01/2007, 17h40
  5. lire un fichier en Unicode=prob
    Par aptyp dans le forum C++
    Réponses: 19
    Dernier message: 10/11/2006, 13h41

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