Page 1 sur 1

[..] Fonction _FileWriteToLine problème d'encodage

Posté : jeu. 24 févr. 2011 18:22
par corrs78
Bonsoir,

j'ai un problème très embêtant.

Je dois ecraser une ligne spécifique d'un fichier de configuration xml. (la ligne 3 pour être précis).
j'utilise donc la fonction appropriée

Code : Tout sélectionner

_FileWriteToLine("C:\Videomotion\Preferences.xml", 3, "ma nouvelle ligne", 1)
-> ma ligne est bien remplacée, mais le problème, c'est qu'une autre ligne de mon fichier comportant des caractères accentués est réencodée de cette sorte :

<VIDEO_DEVICE>Périphérique vidéo USB</VIDEO_DEVICE>

De cette façon mon fichier xml n'est plus interprété correctement par mon logiciel.

Auriez vous une idée pour corriger ce problème ?

Merci à vous

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 00:54
par GaRydelaMer
Bonjour

Utilisé les objets COM
En l'occurrence MSXML, et XPath pour atteindre les Noeuds
► Afficher le texte
► Afficher le texteFichier XML de test encoder avec NotPad++ en UTF8(sans bom)
► Afficher le texteAprés test
Fais en 1 fonction si tu as plusieurs modifications à faire je t'ai mis la gestion des erreurs et les commentaires de chaque ligne.

Bien sur après à toi d'approfondir l'utilisation de MSXML. Tu trouveras l'aide en anglais msxml 4.0 SDK.
Et regarder du coté de l'UDF MSXML.

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 08:15
par FernandG
Bonjour,

En complément de la réponse de GaRydelaMer,
corrs78 a écrit :une autre ligne de mon fichier comportant des caractères accentués est réencodée de cette sorte :

<VIDEO_DEVICE>Périphérique vidéo USB</VIDEO_DEVICE>
Cela me fait penser à un souci bien connu des développeurs de sites Web, l'encodage, l'UTF8.

En regardant de plus près la fonction "_FileWriteToLine" du fichier File.au3 on peut voir un :

Code : Tout sélectionner

FileOpen($sFile, $FO_OVERWRITE)
Or $FO_OVERWRITE correspond à la valeur 2 et ce mode équivaut à un "2 = Write mode (erase previous contents)".

Essayer de faire des tests en modifiant ce mode.
► Afficher le texte
Sinon, postez le fichier "C:\Videomotion\Preferences.xml", pour y faire des simulations.

Bonne journée.

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 10:37
par corrs78
Merci pour votre aide...

j'ai voulu commencer par le plus facile, la solution de FernandG,

mais le problème persiste. (j'ai mis la valeur 256)

curieusement, sur windows 7, j'ai remarqué que je n'avais pas ce problème de réencodage. (seulement sur win XP).

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 12:31
par FernandG
Bonjour,

Merci pour le fichier.
Après vérification, il est bien au format UTF8.

Très rapidement, en reprennant la fonction du fichier Files.au3 pour l'intégrer dans un fichier "au3" de test, cela fonctionne sous un environnement Windows XP.
► Afficher le texte
Bonne journée.

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 12:36
par GaRydelaMer
Bonjour

j'étais parti sur le même chemin que toi, mais je voulais pas modifier une fonction déjà livré car elle gère pas l'encodage ou l'handler du ficher ce qui serais mieux.
C'est pour ca que j'ai proposé une autre approche, ce qui permet aussi de progressé.
► Afficher le texte
Qui au final est plus court.

PS: Je vous prépare pour bientôt une UDF pour les fichiers XML.

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 12:42
par FernandG
GaRydelaMer a écrit :mais je voulais pas modifier une fonction déjà livré
@corrs78 Je confirme les dires de GaRydelaMer ne pas modifier la fonction d'origine, le fichier Files.au3. Par contre on peut la modifier et l'intégrer dans son propre fichier au3, d'où le changement de nom en _MyFileWriteToLine.
GaRydelaMer a écrit :PS: Je vous prépare pour bientôt une UDF pour les fichiers XML.
Ah ... je suis preneur :wink:

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 16:21
par corrs78
Merci à vous ça fonctionne à merveille !

Re: [..] Fonction _FileWriteToLine problème d'encodage

Posté : ven. 25 févr. 2011 16:58
par TommyDDR
Et quand ça fonctionne, on pense au petit [R] ;)