IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Encodage de fichier en sortie [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut Encodage de fichier en sortie
    Bonjour,

    j'ai un fichier en entrée qui est codé ISO 8859 que je lis de cette façon
    Mon objectif est d'écrire certaines lignes dans un fichier en UTF-8 avec BOM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if [..] then 
     writeln(g,a);
    end;
    Actuellement je traite les fichiers manuellement ...
    je pensais me tourner vers la commande iconv de Linux mais je me suis qu'en FreePascal on pouvais peut-être encoder directement.

    Merci de vos conseils.

    Bien à vous

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par joreveur Voir le message
    Mon objectif est d'écrire certaines lignes dans un fichier en UTF-8 avec BOM
    Bonsoir ! J'ai trouvé deux exemples qui semblent correspondre à ton problème.

    P.-S. Autrement il y a les UTF-8 Tools. Je viens de tester l'exemple 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
    program demo_charencstreams;
     
    uses
      charencstreams;
     
    var
      FCES: TCharEncStream;
      s: utf8string;
    begin
      fCES := TCharEncStream.Create;
      fCES.LoadFromFile('mon_fichier_utf8.txt');
      s := fCES.UTF8Text;
      fCES.SaveToFile('copie.txt');
      fCES.free;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Et pour la conversion en UTF-8, j'ai trouvé une fonction mais c'est dans une autre librairie, BBUtils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if strConvertToUtf8('abcdef',eWindows1252)<>'abcdef' then raise Exception.Create('conversion of utf8=latin1 str failed');
      if strConvertFromUtf8('abcdef',eWindows1252)<>'abcdef' then raise Exception.Create('conversion of utf8=latin1 str failed');
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    En regardant mieux dans les UTF8Tools, je vois qu'il y a une démo qui fait exactement ce que tu as besoin de faire. Enfin, je crois.

    J'ai fait un essai en lisant un fichier encodé en ANSI et en le sauvegardant en UTF avec BOM : ça fonctionne.

    P.-S. Quand j'ouvre dans Notepad++ l'échantillon de fichier ISO 8859-1 inclus dans la démo, il me dit que c'est l'Ansi.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut
    Bonjour,

    Merci de tes recherches.

    je vais garder ce billet car je pense que ça peut être utile de convertir directement en Pascal.

    je n'ai pas fait l'essai avec FreePascal mais j'ai utilisé un script pour convertir (car ce n'était qu'un besoin ponctuel sur 1000 fichiers environ)

    Nb je suis sous Linux

    avant sur un fichier de la selection,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $file -i c1.txt
    c1.txt: text/plain; charset=iso-8859-1
    passage de ce script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    rm -rf ToUTF
    mkdir ToUTF
    mv *.txt ToUTF
     
    FROM=iso-8859-1
    TO=UTF-16
    ICONV="iconv -f $FROM -t $TO"
    # Convert
    find ToUTF/ -type f -name "*" | while read fn; do
    cp ${fn} ${fn}.bak
    $ICONV < ${fn}.bak > ${fn}
    rm ${fn}.bak
    done
    Après sur le même fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ file -i c1.txt
    c1.txt: text/plain; charset=utf-16le
    Encore merci pour tes recherches!

    Bonne journée

  6. #6
    Membre averti

    Homme Profil pro
    Diverses
    Inscrit en
    Février 2014
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Diverses

    Informations forums :
    Inscription : Février 2014
    Messages : 122
    Points : 428
    Points
    428
    Par défaut
    Je découvre cette discussion un peu tard mais bon...

    Un fichier encodé en ISO-8859 ça ne veut pas dire grand chose. ISO-8859 est une norme qui définit plusieurs encodages. Vraisemblablement ton fichier d'entrée est en ISO-8859-1 ou ISO-8859-15.

    Si c'est de l'ISO-8859-1 la conversion vers Unicode est très simple car si je me souviens bien les 255 premiers caractères unicode sont les 255 caractères de l'ISO-8859-1. Donc on doit pourvoir réaliser la conversion avec un fonction ressemblant à ça (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function ISO8859_1_To_UTF8(const S: String) : UTF8String;
    var
      I : Integer;
      WS : WideString;
    begin
      SetLength(WS, Length(S));
      for I := 1 to Length(S) do
        WS[I] := WideChar(S[I]);
      Result := UTF8Encode(WS);
    end;
    Pour l'ISO-8859-15 c'est un peu plus compliqué car il y a 8 caratères qui ne sont pas à la même place que dans l'Unicode.

    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
    22
    23
    24
    25
    26
     
    function ISO8859_1_To_UTF8(const S: String) : UTF8String;
    var
      I : Integer;
      C : Char;
      WS : WideString;
    begin
      SetLength(WS, Length(S));
      for I := 1 to Length(S) do
      begin
        C := S[I];
        case Ord(C) of
        $A4 : WS[I] := WideChar($20AC);
        $A6 : WS[I] := WideChar($0160);
        $A8 : WS[I] := WideChar($0161);
        $B4 : WS[I] := WideChar($017D);
        $B8 : WS[I] := WideChar($017E);
        $BC : WS[I] := WideChar($0152);
        $BD : WS[I] := WideChar($0153);
        $BE : WS[I] := WideChar($0178);
        else
          WS[I] := WideChar(C);
        end;
      end;
      Result := UTF8Encode(WS);
    end;

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

Discussions similaires

  1. [SQLCMD] Encodage et fichiers de sortie
    Par Invité dans le forum Outils
    Réponses: 11
    Dernier message: 09/07/2010, 09h19
  2. encodage utf8 fichier sortie
    Par knebhi dans le forum Langage
    Réponses: 9
    Dernier message: 06/02/2010, 19h36
  3. Spécifier le format d'encodage d'un fichier de sortie
    Par strat0 dans le forum VBScript
    Réponses: 5
    Dernier message: 29/12/2006, 15h50
  4. [Eclipse 2.1] Encodage des fichiers pour un projet
    Par _-Sky-_ dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/05/2005, 22h26
  5. Réponses: 4
    Dernier message: 22/11/2004, 19h29

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