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:
et je fais deux fois :
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(); }
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 :
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 <?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>
Je vous remercie d'avance pour votre aide
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>
Partager