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

API, COM et SDKs Delphi Discussion :

pb TsuperObject avec unicode


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    developpeur pascal (delphi)
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : developpeur pascal (delphi)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Par défaut pb TsuperObject avec unicode
    Bonjour à tous,

    J'utilise depuis très peu delphi et je tombe déjà sur un os
    Je fais une requête http chez Itunes et ça me retourne un resultat de type json.

    Pour récupérer une chaine ( genre titre d'un album ou d'une piste ) je suis obligé de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UTF8Decode(ListeResult[I].S['collectionName'])
    au cas où il y aurait des caractères accentués (ça je sais pas si c'est normal).
    Cependant, sur certains titres d'album il y a de l'unicode sur le guillemet (\u2019m) avec un UTF8Decode ça me fait un '?' à la place donc dans ce cas là faudrait pas que je decode mais je vois rien qui puisse tester une chaine si elle contient de l'unicode.

    Et si je tombe sur un titre qui contient de l'unicode ET des accents, je sais pas quoi faire

    mon exemple:
    requête http : http://ax.itunes.apple.com/WebObject...erm&country=FR

    exemple 2 :
    http://ax.itunes.apple.com/WebObject...bute=albumTerm
    avec "term=énervé " écrit exactement comme ça

    merci d'avance pour votre aide

  2. #2
    Futur Membre du Club
    Profil pro
    developpeur pascal (delphi)
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : developpeur pascal (delphi)

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Par défaut
    pour l'instant j'ai fais cette petite bricole, mais ça m'a pas l'air tres fiable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    stringTest         := DetectUTF8Encoding(ListeResult[I].S['collectionName']);
                   if stringTest=etANSI then
                      aR.title           := ListeResult[I].S['collectionName']
                   else
                      aR.title           := UTF8Decode(ListeResult[I].S['collectionName']);

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 74
    Par défaut
    D'abord, de quelle type est " ListeResult[I].S['collectionName'] ", est-ce un string ou un PChar ?

    Ensuite UTF8Decode permet de convertir une chaîne UTF8 en Unicode, si ta chaîne de départ contient déjà de l'unicode tu ne trouves pas ça un peu étrange ?

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    Est-ce bien de l'UTF8 et non un codage ANSI qui est retourné, avec parfois des caractères échappés style C/C++/Java source code "\u2019" , cf. http://www.fileformat.info/info/unic...2019/index.htm ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    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 093
    Par défaut
    Vous avez remarqué que la question r1theOne date déjà de deux semaines ?
    Par sûr qu'il vous lise !

    faudrait peut-être remplacé TSuperObject par TJSONObject

    Pour moi, c'est au composant JSON de transformer ce type de caractère correctement !
    De plus la version de Delphi n'a pas été indiqué, hors pour un problème de CharSet c'est la 1ère chose à faire !

    UTF8Decode sur un WideString, j'aurais pas confiance, car la première chose c'est qu'il traduit le WideString en AnsiString (D7) ou RawByteString (DXE)
    Il y a un risque de perte de tout caractère hors de Windows-1252 pour un OS Français !

    Pour répondre à istam3, TSuperObject utilise une SOString qui est UnicodeString, WideString ou string selon des directives de compilation
    Semble que string soit utilisé en 2009 à XE2
    Sinon, avant cela devait être WideString donc déjà Unicode

    Et donc si c'est le contenu qui est faux, bug du composant, on peut franchement en douter, vu le code, on sent que cela a été sérieusement bossé !

    Donc je pense à bug dû à ton utilisation via aR.title !
    Si c'est un Caption, en D7, cela ne supporte pas l'Unicode d'où les ? qui s'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBoxW(0, PWideChar(ListeResult[I].S['collectionName']), nil, 0);
    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

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 74
    Par défaut
    Vous avez remarqué que la question r1theOne date déjà de deux semaines ?
    Par sûr qu'il vous lise !

    Comme je venais de déposer une question, je faisais aussi un petit tour voir si je pouvais être utile et j'avoue que je regarde pas du tout les dates qu'en je réponds , ShaiLeTroll apparemment toi tu ne regardes pas toujours qui réponds !
    Merci pour les précisions sur le type, je suis persuadé que son soucis vient de là et de la conversion.

Discussions similaires

  1. Problème getc avec unicode
    Par Lota123 dans le forum C
    Réponses: 9
    Dernier message: 02/06/2008, 16h43
  2. Problème avec Unicode
    Par pdgnr dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/01/2008, 23h06
  3. Caractère avec Unicode
    Par rawanex dans le forum Langage
    Réponses: 1
    Dernier message: 14/07/2006, 15h32
  4. [CR(10)]Problème avec unicode (japonais)
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 26/05/2005, 09h55
  5. [info] Caractere avec Unicode
    Par Skarlix dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 03/02/2005, 22h39

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