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

WinDev Discussion :

Encodage JSON et Webservice [WD24]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Points : 116
    Points
    116
    Par défaut Encodage JSON et Webservice
    Bonjour à tous,

    Voilà plusieurs jours que je galère à résoudre un problème d'encodage d'un JSON envoyé à une application tournant sous une page web.

    Contexte : Une application Web envoie un JSON pour consommer un web service développé en Windev. Un Web service renvoie un message au format JSON à l'application web.
    A l'origine le WS à été développé en WB20 et ne posait aucune problème à la réception des messages.

    Le problème se trouve au niveau du message renvoyé par le web service, celui -ci est renvoyé avec des caractères non interprétés

    Message renvoy� par le WS
    le message de retour est en unicode exemple("\u00e0" pour le à )

    Dans l'existant le message de retour est retravaillé comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sMessage = Remplace(sMessage, "\u00e9", "é")
    sMessage = Remplace(sMessage, "\u00e8", "è")
    sMessage = Remplace(sMessage, "\u00ea", "ê")
    sMessage = Remplace(sMessage, "\u00e0", "à")
    Afin de traduire les caractères spéciaux puis renvoyé à l'application web.

    Je n'arrive pas à renvoyé les caractères spéciaux.

    Lorsque je renvoie la chaine en HTML avec la fonction texteVersHTML, l'application web me retourne ce message d'erreur

    Unexpected character ('&' (code 38)): was expecting double-quote to start field name at [line:1, column:4]
    L'application web est encodé en UTF-8 et utilise SalesForce.
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />

    Voici le code qui renvoi le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sérialise(gStr_Reponse,sReponse,psdJSON)
    //Affiche le message avec les caractères accentués 
    sReponse = PG_Transcondification(sReponse)
     
    RENVOYER sReponse
    J'ai mis sur le serveur un log pour capter les réponses et ces dernières sont correctement formatés.

    Toutes les idées sont bien venues pour m'aider à résoudre ce problème.

    Merci a tous pour vos idées et votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 998
    Points : 2 095
    Points
    2 095
    Par défaut
    Bonjour,

    Utiliser ChaineVersUtf8 ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Points : 116
    Points
    116
    Par défaut
    Bonjour philouZ,

    Je te remercie pour ta proposition, mais j'ai déjà testé avec cette fonction mais ça ne donne rien. Si je renvoi de l'UTF-8, l'application web ne traduit pas les caractères accentués

    Par contre j'ai avancé un peu sur le sujet.

    Lorsque je retournais la chaine à l'application WEB, je transformais la chaine après le sérialise. En modifiant un peu mon code à ce niveau j'arrive maintenant à avoir les accents mais par contre la chaine est tronqué au lieu d'avoir la chaine complète.
    Je traduit la chaine en HTML puis après je la sérialise. ça améliore la chose mais pas à 100%

    J'ai "exté" en retour au lieu de "extérieur ......"

    Voila la modification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    gStr_Reponse.Description =gStr_Reponse.Code+ " - "+ PG_Transcodification(PG_Message(gStr_Reponse.Code))
     
    Sérialise(gStr_Reponse,sReponse,psdJSON)
     
     
    RENVOYER sReponse
    Et la procédure PG_Transcodification()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sMsgHTML = TexteVersHTML(sMessage)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    j'ai pas compris qui envoie quoi et qui reçoit quoi.
    Le formatage JSON est correct surtout en UTF8.

    je pense qu'une conversion unicode s'impose avec un UnicodeVersAnsi.
    Je ne sais pas comment votre projet est établi mais nous avons l'habitude de formater les projets en Unicode surtout lorsqu'il consomme des apis JSON.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Points : 116
    Points
    116
    Par défaut
    Problème résolu

    Pour le mot tronqué, une petite suppression des points-virgules après le codage en HTML ont résolu le soucis.

    theWebBeginner

    C'est Windev qui envoi une chaine de caractère et c'est l'application Web qui la reçois. J'avais testé de l'unicode mais ça ne donnais rien de bon.


    Merci a tous pour vos idées et votre aide

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 998
    Points : 2 095
    Points
    2 095
    Par défaut
    J'ai un peu de mal à comprendre.

    Peux-tu nous indiquer quel est l'encodage utilisé par le webservice ?

    Si c'est de l'utf8, théoriquement tu n'as rien à faire ou au pire un Utf8VersChaine(). Si c'est de l'unicode il faut utiliser ChaineVersUtf8().

    Seul l'entête de la réponse peut te permettre d'identifier l'encodage de la réponse.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par philouZ Voir le message
    J'ai un peu de mal à comprendre.

    Peux-tu nous indiquer quel est l'encodage utilisé par le webservice ?

    Si c'est de l'utf8, théoriquement tu n'as rien à faire ou au pire un Utf8VersChaine(). Si c'est de l'unicode il faut utiliser ChaineVersUtf8().

    Seul l'entête de la réponse peut te permettre d'identifier l'encodage de la réponse.
    L'encodage du WS est en unicode a la base. Même en utilisant ChaineversUTF8() les caractères accentués n'étaient pas interprétés. Après je sais plus si je l'ai signalé, l'application Web tourne sous SalesForce et j'ai vu pas mal de post sur le net qui relève le problème que j'ai eu mais sans apporter de réponse.

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 998
    Points : 2 095
    Points
    2 095
    Par défaut
    L'encodage du WS est en unicode a la base
    C'est déjà très clairement un problème, il devrait être encodé en utf8. C'est le seul encodage qui soit identique sur toutes les plateformes...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Points : 116
    Points
    116
    Par défaut
    Oui mais chaineversUTF8 ne fonctionne pas. J'ai toujours les caractères non traduits dans l'application web.

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 998
    Points : 2 095
    Points
    2 095
    Par défaut
    En gros tu devrais avoir chaineversutf8 dans le WS et utf8verschaine côté appli

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

Discussions similaires

  1. [ZF2.x] Perte d'attributs lors de l'encodage JSon
    Par narmataru dans le forum Zend Framework
    Réponses: 0
    Dernier message: 15/04/2013, 11h09
  2. [PHP 5.3] Encodage JSON : donnée perdue ?
    Par kolbek dans le forum Langage
    Réponses: 0
    Dernier message: 01/03/2013, 16h00
  3. [2.x] Encodage Json d'objets Doctrine
    Par Philippe PONS dans le forum Symfony
    Réponses: 4
    Dernier message: 08/02/2013, 11h47
  4. [MySQL] Probleme encodage JSON/PHP
    Par tomy29 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/03/2012, 09h36
  5. les accent entre PHP et JQuery et encodage json
    Par nicko_73 dans le forum jQuery
    Réponses: 1
    Dernier message: 22/12/2009, 15h43

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