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

Qt Discussion :

Transfert de caractères spéciaux de QDomDocument vers un fichier XML puis QAction


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut Transfert de caractères spéciaux de QDomDocument vers un fichier XML puis QAction
    Salut,

    Alors j'ai un petit problème de caractère spéciaux dans mon programme qui est très génant dans son fonctionnement.

    C'est un programme qui donne les dernières news de journaux web francais. Voici le sujet principale : http://www.developpez.net/forums/d15...ctnews-france/
    les sources sont disponibles ici : https://sourceforge.net/projects/directnewsfrance/

    mais je vais poster les lignes du code qui nous interessent ici.

    Fonctionnement :

    Au lancement du programme, je fais d'abord une lecture du fichier history.xml stocké en local pour remplir les QAction du menu du system tray -> no problemo
    Au cours du processus, je simule le fait d'envoyer un article à enregistrer dans l'xml si il n'existe pas déjà, cet article a pour titre "à l'autre bout du monde" -> prob bob : dans le QAction, je vois un point d'interrogation (?) dans un losange noir à la place du "à". quand j'ouvre l'xml dans notepad++, je vois "xE0 l'autre bout du monde"
    Je relance dans la même execution la simulation d'envoyer le même article avec la même phrase en espérant qu'il l'ignore, je l'ai codé ainsi, si l'article existe déjà dans le xml, on ne fait rien -> une entrée est encore créée avec le (?) losange noir dans le QAction et l'article premièrement envoyé présente cette fois ci un (?) normal à la fois au QAction qu'au fichier xml lu par notepad ++

    Donc voila, que faire pour que tous les caractères spéciaux soit lu normalement et que la phrase puisse être correctement comparé à chaque envoie d'article.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    void Window::ReadXML()
    {
        [...]
    AppFiles::historyXML->open(QIODevice::ReadOnly)
          [...]
    domfile->setContent(AppFiles::historyXML)
    [...]
        QDomNode principalNode = domfile->documentElement();
    [...]
     
                QString titleTrunc = item.namedItem("title").toElement().text();
    [...]
                listArticles[k][i]->setText(titleTrunc);
    [...]
    }
     
    void Window::insertArticleXML(QString cat, QString title, QString url)
    {
    [...]
    AppFiles::historyXML->open(QIODevice::ReadOnly)[...]
    [...]
    domfile->setContent(AppFiles::historyXML)
    [...]
        QDomElement *newItem = new QDomElement(domfile->createElement("item"));
     
        QDomElement titleSubItem = domfile->createElement("title");
        QDomText titleText = domfile->createTextNode(title);
    [...]
        titleSubItem.appendChild(titleText);
     
        newItem->appendChild(titleSubItem);
     
     
        QDomNode principalNode = domfile->documentElement();
     
        QDomNode catNode = principalNode.namedItem(cat);
     
    [...]
        QDomNode *item = new QDomNode(catNode.firstChild());
     
        if(item->isNull()){
            catNode.appendChild(*newItem);
        }
        else{
            if(item->namedItem("title").toElement().text() == title)
                return;
            catNode.insertBefore(*newItem,*item);
        }
     
    [...]
        QString write_doc = domfile->toString();
     
        AppFiles::historyXML->open(QIODevice::WriteOnly)
    [...]
     
        AppFiles::historyXML->resize(0);
        QTextStream stream(AppFiles::historyXML);
        stream << write_doc;
    [...]
     
        ReadXML();
    }
    et je fais deux fois :
    emit instantNews("monde","à l'autre bout du monde","http://www.google.fr");

    à 15 secondes d'intervalle quelque part d'autre dans le code

    Je pense vous avoir donné les principale lignes de code. S'il vous manque quelque chose : https://sourceforge.net/projects/directnewsfrance/

    initialement, le fichier history.xml était comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?xml version='1.0' encoding='UTF-8'?>
    <articles>
     <alaune>
      <item>
       <title>Breaking news man!</title>
       <link>http://www.google.fr</link>
      </item>
      <item>
       <title>1ere news à la une, blablablablablablablablablablablablablablablablablablablablablablablabla.</title>
       <link>http://sharablemusic.free.fr</link>
      </item>
      <item>
       <title>2eme histoire à la une,blopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblop.</title>
       <link>http://www.google.fr</link>
      </item>
     </alaune>
     <monde>
     </monde>
     <politique/>
     <societesante/>
     <economie/>
     <science>
      <item>
       <title>Oh la science, cuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicui.</title>
       <link>http://sharablemusic.free.fr</link>
      </item>
     </science>
     <art/>
     <sport/>
     <people/>
    </articles>
    Après execution, il est comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <?xml version='1.0' encoding='UTF-8'?>
    <articles>
     <alaune>
      <item>
       <title>Breaking news man!</title>
       <link>http://www.google.fr</link>
      </item>
      <item>
       <title>1ere news ? la une, blablablablablablablablablablablablablablablablablablablablablablablabla.</title>
       <link>http://sharablemusic.free.fr</link>
      </item>
      <item>
       <title>2eme histoire ? la une,blopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblopblop.</title>
       <link>http://www.google.fr</link>
      </item>
     </alaune>
     <monde>
      <item>
       <title>࡬'autre bout du monde</title>
       <link>http://www.google.fr</link>
      </item>
      <item>
       <title>? l'autre bout du monde</title>
       <link>http://www.google.fr</link>
      </item>
     </monde>
     <politique/>
     <societesante/>
     <economie/>
     <science>
      <item>
       <title>Oh la science, cuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicuicui.</title>
       <link>http://sharablemusic.free.fr</link>
      </item>
     </science>
     <art/>
     <sport/>
     <people/>
    </articles>
    Je vous remercie d'avance pour votre aide

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    Si c'est pas clair dites le moi...

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    résolu avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if QT_VERSION < 0x050000
        QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
        QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    #endif
        QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    dans le main juste après la création de la QApplication

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

Discussions similaires

  1. Caractères spéciaux dans un nom de fichier
    Par aminzz92 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/01/2014, 09h40
  2. [File & Zip] Caractères spéciaux dans les noms de fichiers
    Par Marvelll dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/02/2010, 17h50
  3. Script shell pour enlever les caractères spéciaux d'un nom de fichier
    Par babo dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 12/09/2008, 13h49
  4. Caractère spéciaux dans un nom de fichier
    Par eddie5150 dans le forum Java ME
    Réponses: 6
    Dernier message: 26/06/2008, 14h52
  5. [vb.net] transfert d'une table SQL-Servr vers un fichier texte
    Par nkonito dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/05/2006, 04h36

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