Bonjour à tous et, par la même occasion Joyeuses fêtes.
J'ai, comme beaucoup de personnes, un problème d'encodage entre ANSI et UTF8.
Je récupère dans un tableau (environ 40000 lignes et 5 colonnes ) un fichier (en fait la liste des codes postaux avec le nom du département , celui de la ville et les coordonnées géographiques) des communes de France.
J'ai construit ce fichier à partir de divers fichiers trouvés sur Internet et il ses présente de la façon suivante (format csv) :
id;ville;CP2;longitude;latitude;NomDpt
1;L ABERGEMENT CLEMENCIAT;01400;4.9209267;46.1511463;Ain
2;L ABERGEMENT DE VAREY;01640;5.3973453;46.0283575;Ain
............................................................................;;
2513;ST PRIVAT;07200;4.4129524;44.627478;Ardêche
2514;ST PRIX;07270;4.5003066;44.9429247;Ardêche
2515;ST REMEZE;07700;4.5019848;44.3926256;Ardêche
Etc.... jusqu'à Monaco (code 99000).
Je récupère dans un tableau l'ensemble du fichier pour pouvoir par la suite, à partir du simple renseignement du code postal renseigner le nom de la ville et les coordonnées géographiques.
Cela fonctionne bien à un détail prés :
Lorsque le nom du département comporte des caractères accentués etc.. (ASCII > 128) .
J'ai cru contourner la difficulté en validant dans les Usees LazUTF8 et en utilisant la transcription ANSItoUTF8 dans le code suivant :
Je pourrai toujours tenter d'enregistrer le fichier CSV au format UTF8 mais, à ce moment là la recherche automatique des caractères spéciaux mal affichés et leur remplacement par le caractère adéquat (sous Notepad) ne fonctionne psa bien et le remplacement manuel sur près de 40000 lignes, m^me s'il n'y ena que le quart à traiter est une vraie galère.
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 While not Eof (FichVille) Do Begin i_Ville := i_Ville + 1 ; // lecture ligne par ligne du fichier csv readln(FichVille, LignVillei ) ; // lecture ligne par ligne du fichier villes.csv LongLVille := length(LignVillei) ; k := 0 ; For i := 1 to LongLville Do Begin if (lignVillei[i] <> ';') Then motlign[k] := motlign[k] + AnsiToUTF8(lignVillei[i]) ; // Construction du tableau if (lignVillei[i] = ';') Then k:= k + 1 ; end; For j := 0 to 5 do Begin listLieux[j , i_ville] := motlign[j] ; // remplissage du tableau correspondant à Villes.csv motlign[j] := '' ; // vidage des valeurs après les avoir stocké end; End; CloseFile (FichVille) ;
Que faire ?
Merci de vos suggestions .
Partager