Discussion: Encodage ANSI -- UTF8 [Lazarus]

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    mars 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 149
    Points : 149
    Points
    149

    Par défaut Encodage ANSI -- UTF8

    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 :
    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) ;
    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.
    Que faire ?

    Merci de vos suggestions .

  2. #2
    Membre averti
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    juillet 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2011
    Messages : 196
    Points : 432
    Points
    432

    Par défaut

    Bonjour,

    Et en passant toutes tes chaînes en majucules en utilisant l'une des méthodes de cette discussion?

    Cordialement

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    mars 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 149
    Points : 149
    Points
    149

    Par défaut Encodage ANSI - UTF8

    Bonjour à tous,


    En fait, après avoir posté ma discussion j'ai continué à consulter la FAQ et la solution s'y trouvait :

    La conversion peut être réalisée par la fonction ISO_8859_15ToUTF8 de l'unité LConvEncoding.

    en remplaçant dans mon code AnsitoUTF8 par ISO_8859_15ToUTF8 et en validant LConvEncoding dans les uses cela fonctionne bien

    Merci pour les suggestions .

    Cordialement

    R.O.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    mars 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2010
    Messages : 149
    Points : 149
    Points
    149

    Par défaut Conversion ANSI --- UTF8

    En complément de la réponse signalant la discussion comme résolue :
    Voir le site :

    https://lazarus.developpez.com/faq/?...u-vers-l-UTF-8

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [encodage] validation utf8
    Par drKzs dans le forum C++
    Réponses: 6
    Dernier message: 27/09/2010, 11h01
  2. Problème d'encodage : ANSI => UTF-8
    Par Iverstan dans le forum Grails
    Réponses: 9
    Dernier message: 01/09/2010, 13h28
  3. Encodage unicode UTF8
    Par yaya0057 dans le forum Jasper
    Réponses: 1
    Dernier message: 23/02/2010, 01h21
  4. Encodage ANSI => UTF-8
    Par whorian dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/05/2009, 10h22
  5. Problème d'encodage LATIN - UTF8
    Par coeurdange dans le forum Langage
    Réponses: 3
    Dernier message: 22/07/2008, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo