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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

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

#1

Message 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
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#2

Message 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.
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

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

#3

Message 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.
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

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

#4

Message 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).
Fichiers joints
Preferences.xml
(2.06 Kio) Téléchargé 89 fois
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

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

#5

Message 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.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#6

Message 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.
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

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

#7

Message 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:
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

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

#8

Message par corrs78 »

Merci à vous ça fonctionne à merveille !
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#9

Message par TommyDDR »

Et quand ça fonctionne, on pense au petit [R] ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre