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

Langage Delphi Discussion :

UTF8 : encode et decode


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut UTF8 : encode et decode
    Bonjour,

    Je sais que ma question va vous sembler bête, mais là, je patauge sec.

    Quand faut-il utiliser UTF8Decode ? Idem pour UTF8Encode ?

    Pour l'instant, la règle que j'utilise c'est :
    - données entrantes dans le programme (via un fichier, un flux, etc...) : UTF8Encode
    - données sortantes du programme (ecriture dans un ficher par exemple, affichage dans un TMemo) : UTF8Decode

    Le problème, c'est que ça marche pas à tous les coup (je viens d'approcher l'unicode, je suis sous D6/D7). J'en conclu que ma règle est mauvaise.

    Quelqu'un pourrait-il donc me dire quelle "règle", ou de quelle façon on détermine si on doit utiliser Decode ou Encode (ou rien du tout dans certains cas,car je pense que mon problème vient en parti de là)

    MErci de votre aide

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par diam's Voir le message
    - données entrantes dans le programme (via un fichier, un flux, etc...) : UTF8Encode
    - données sortantes du programme (ecriture dans un ficher par exemple, affichage dans un TMemo) : UTF8Decode
    C'est l'inverse

    UTF8Encode encode une chaîne interne au programme en chaîne UTF-8 stockable à l'extérieur du programme.
    UTF8Decode fait l'opération inverse.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut
    Bonjour sjrd,

    Euh...es-tu sur de ce que tu dis ?

    Parce que j'utilise Encode par exemple pour utiliser les chemins d'accès aux fichiers afin que le traitement se fasse en UTF8 dans le programme, et Decode pour stocker des chaines dans un fichier texte (sous windows).

    Mais comme je dis, je me mélange souvent les pinceaux

    En gros, mon pb c'est de stoker dans un XML des infos, et de les y relire. Mais sous windows (XP), l'UTF8 n'est pas 'natif' et je veux pourvoir éditer mon xml sous un éditeur de texte (tel Context par exemple)

    MAis y a des fois où ça marche pas ... probablement parce j'utilise en/decode alors qu'il faudrait pas.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 914
    Par défaut
    TXMLDocument utilise par défaut l'UTF8 et le bloc-notes permet la lecture/sauvegarde dans ce format

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut
    @Andnotor : y'a des jours comme ça. Y'a pas un bouton "éjecter le boulet" sur le forum, histoire que je m'auto-éjecte ?

    Par contre j'utilise pas le bloc-note (je lui préfère ConText Editor), mais je regarderais ça. Et le bloc-note sous XP gère l'UTF8 ?

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    Le Bloc-Note gère l'UTF-8 mais attention, il ne faut pas enregistrer son fichier avec, si il détecte un fichier XML UTF8, si tu le modifie et que tu l'enregistre, il va bien conserver l'encodage mais rajoute un BOM ce qui peu provoquer de mauvaise surprise !

    Sinon, la Règle du Decode\Encode n'est pas absolue, c'est à toi, de bien savoir dans chacun des Flux quel est le type de l'encodage !
    Il existe des fonctions pour déterminer l'encodage (sans le BOM) par une analyse statistique des combinaisons de Byte dans le fichier (comme NotePad le fait)
    Mais il est vrai que tu as enoncé l'inverse comme le fait remarquer AndNotOr

    Comme par défaut Delphi 6/7 est ANSI (Windows-1252 plus exactement), c'est UTF8Decode pour lire des données extérieures, et UTF8Encode pour les écrire ...


    veille que ton entête précise l'encodage !
    Normalement, avec un XML et TXMLDocument, tu n'as pas à te préoccuper de l'encodage, il va traduire lui même tout en UniCode (type du WideString sous D6/D7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?ml version="1.0" encoding="UTF-8"...
    UTF8Encode\Decode doit être utilisé si tu lit le fichier manuellement via TFileStream, ReadBlock, ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. encoder et decoder un objet Serailizable
    Par y_chafaqi dans le forum Langage
    Réponses: 2
    Dernier message: 22/09/2011, 10h27
  2. flux xml avec é : Invalid UTF8 encoding
    Par Sun03 dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 07/02/2010, 19h12
  3. encode et decode
    Par Dominikk dans le forum Général Python
    Réponses: 4
    Dernier message: 28/03/2009, 12h57
  4. Postgresql utf8 - Encoding
    Par xian21 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 20/06/2008, 08h49
  5. Réponses: 21
    Dernier message: 27/03/2008, 13h28

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