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

C++Builder Discussion :

encodage récalcitrant :( [Web/Reseaux]


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut encodage récalcitrant :(
    Bonsoir,

    me revoila déjà vers vous pour un nouveau défi ...

    dans ma base de donnée, je vais bien sûr rentrer ma collection de sable, mais j'envisage aussi d'y intégrer des sables disponibles sur des liste d'échange d'autres collectionneurs ...
    Je vais donc récupérer ces listes d'échange sur le net. Avec la méthode get() du composant indy TIdHTTP j'arrive à récupérer le contenu d'une page .html. Mon problème vient des pages encodées en UTF-8 que je n'arrive pas à convertir au format UnicodeString utilisé par défaut par le Builder XE

    Selon la doc Embarcadero la methode IdHTTP->get() me retourne un String
    (function Get(
    AURL: string
    ): string; overload;
    A propos que signifie le overload ?

    Je suppose que si la page .html est déclarée en UTF-8 mon string doit aussi être en UTF-8 ... "Naïvement", je pensais donc qu'après un UTF8ToUnicodeString(maPage) tout irait bien : ERREUR !!
    Quoi que je fasse, si je met ma page dans un mémo par exemple tous les caractères accentués sont mal restitués - exemple : é à la place de é

    Quelqu'un a-t-il déjà été confronté à ce genre de problème, et comment faire pour récupérer mes données correctement encodées ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 049
    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 049
    Par défaut
    overload est un mot clé Delphi indiquant qu'il existe plusieurs formes de la même fonction avec différents paramètre, la surcharge
    Ne pas confondre avec override, pour la rédéfinition de méthodes déclaré en virtual !

    Après pour le problème de IdHttp, ne l'ayant utilisé qu'en Delphi 7, je n'ai pas trop de réponse !

    tu peux toujours tenter UFT8Decode sur la chaine reçue pour la convertir !
    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    Bonsoir,

    j'avais déjà testé UTF8Decode comme à peu prés toutes les fonctions permettant de prés ou de loin le codage/décodage des chaines.

    J'ai repris mes tests en tout sens et j'ai fini par trouver une solution. En fait le problème ne vient pas directement de la fonction utilisée mais de la bonne déclaration de la variable ... Je crois que le nouveau type de chaine UnicodeString n'a pas finie de me faire m'arracher des cheveux ! Dans la doc on trouve : "Le nouveau type string par défaut de RAD Studio est le type UnicodeString... Pour RAD Studio, le format de AnsiString a changé, cela rend le format identique pour AnsiString et pour le nouveau type UnicodeString..."
    Et pourtant dans mon cas, UnicodeString var = UTF8Decode(utfvar); ne fonctionne pas alors que AnsiString var = UTF8Decode(utfvar); donne enfin le résultat attendu !

    La doc Embarcadero annonce UTF8Deconde comme étant dépréciée (UTF8Decode [[deprecated("Use UTF8ToWideString or UTF8ToString")]]). En pratique ces trois fonction fonctionnent avec une bonne déclaration des variables.

    Voila, au final j'ai retenu UTF8ToString et tout fonctionne

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 049
    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 049
    Par défaut
    UTF8Decode fonctionne avec des UT8String et WideString en BSD2007
    Suprise en BSD2009, c'est RawByteString et WideString

    Le vrai type de var devrait même être WideString !
    Tu as de la chance de n'avoir que du Latin1 dans ton UTF8 car sinon AnsiString ne pourrait pas accepter des caractères en dehors de ce charset !

    Le type implique de la conversion implicite si tu n'utilises pas le bon !
    Effectivement, étant en Delphi, je suis très rigoureux avec mes types et j'utilise ceux des prototypes de fonctions, cela évite souvent des surprises !
    Mais si chez CodeGear, il chance les types selon les versions, ça n'aide pas !
    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

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

Discussions similaires

  1. Un "0" récalcitrant
    Par bidson dans le forum XMLRAD
    Réponses: 4
    Dernier message: 20/04/2004, 13h56
  2. Encodage de cd en fichier mp3
    Par clovis dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 08/04/2004, 01h13
  3. [ENCODAGE][JAVA]Afficher correctement des accents
    Par kornelius dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/02/2004, 16h37
  4. Encodages DOS et Windows
    Par Aramis dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2003, 17h55
  5. [VB6] fonction d' encodage URL en VB
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2003, 11h16

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