Bonjour à tous
Je suis en train de développer un utilitaire qui manipule des fichiers xml en utilisant un TXMLDocument et j'ai un soucis d'encodage.
Dans mon fichier xml en entête j'ai ça
Malheureusement je ne peux pas utiliser la fonction LoadFromFile() car il y a dans ce fichier des syntaxes XML qui sont rejeté par TXMLDocument du coup je suis obligé de faire comme ceci pour lire mon fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <?xml version="1.0" encoding="UTF-8"?>
Et malgré le fait que l'encodage soit précisé, j'ai des bizarreries dès que j'ai des accents et même des fois sur des caractères qui ne devrait pas poser de problème comme le caractère espace qui devient "Â " au lieu de " "
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 procedure TcotcotFrm.fic2XML(nomfic: string; var docx: TXMLDocument); var d: integer; ligne: String; fic: Text; begin docx.Active := false; docx.Xml.Clear; AssignFile(fic, nomfic); reset(fic); while not(eof(fic)) do begin readln(fic, ligne); d := pos('<!DOCTYPE', ligne);//ligne posant problème if (d = 0) and (ligne <> '') then docx.Xml.Add(ligne); end; closefile(fic); docx.Active := true; end;
J'ai aussi essayé de faire ça pour la lecture
mais là j'ai l'exception suivante: EConvertError Declared encoding does not match byte order mark même si j'utilise LoadFromFile sans préciser l'encodage.
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 procedure TcotcotFrm.fic2XML(nomfic: string; var docx: TXMLDocument); var i,d: integer; lignes: TStringList; begin docx.Active := false; docx.Xml.Clear; lignes:=TStringList.Create; lignes.LoadFromFile(nomfic,TEncoding.UTF8); for i:=0 to lignes.Count-1 do begin d := pos('<!DOCTYPE', lignes[i]); if (d = 0) and (lignes[i]<> '') then docx.Xml.Add(lignes[i]); end; docx.Active := true; end;
En fait ça ne fonctionne que si je supprime encoding="UTF-8" de l'entête xml. Mais si je fait ça j'ai mes bizarreries
Du coup je me demandais s'il y avait un moyen de vérifier que mon fichier est bien en utf8 et si non comment corriger les problèmes
Partager