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 :

XE10 Transfert de fichier en JSON


Sujet :

Langage Delphi

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut XE10 Transfert de fichier en JSON
    Bonjour tou(te)s

    Je suis en train de prendre le chou avec System.NetEncoding.TBase64Encoding.

    Côté client, je crée un objet JSON dans lequel je mets un TJSONArray contenant des fichiers.
    Chaque élément contient le nom et les données encodées en base64 avec System.NetEncoding.TBase64Encoding.
    Tout semble bien se passer.

    J'envoie le JSON à mon serveur et làaussi, tout va bien. Les données sont les mêmes au départ et à l'arrivée.

    Sauf que, quand je veux décoder le base64 pour recréer mon fichier, je me ramasse:

    ---------------------------
    Notification des exceptions du débogueur
    ---------------------------
    Le projet TrucmucheServer.exe a déclenché la classe d'exception EEncodingError avec le message 'Aucun mappage pour le caractère Unicode n'existe dans la page de code multi-octet cible'.
    ---------------------------
    Arrêter Continuer Aide
    ---------------------------
    J'encode et décode avec le même système des 2 cotés.
    J'ai tenté d'utiliser des string puis des ansistring mais le résultat est le même.

    Est-ce que vous pouvez me conseiller une autre unité cachée pour faire un base64 ?

    Papy !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    J'ai vu cette erreur sur Internet la dernière fois en cherchant "je ne sais plus quoi"

    Results of DecodeBase64 only 1 Byte on Android?

    Base64 encodes binary to text. And decoding decodes text to binary. So, starting with a string you need to encode the text to binary using some well defined text encoding. For instance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var
      bytes: TBytes;
    ....
    bytes := TEncoding.UTF8.GetBytes(str);
    Now you can base64 encode bytes which is binary as required.

    In the reverse direction, decoding the base64 encoded text yields a byte array representing UTF-8 encoded text. Decode that like so:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str := TEncoding.UTF8.GetString(bytes);
    In XE7 you should not use Soap.EncdDecd. Instead use System.NetEncoding.TNetEncoding. Call TNetEncoding.Base64.EncodeBytesToString to encode as base64 and TNetEncoding.Base64.DecodeStringToBytes to decode.

    To encode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bytes := TEncoding.UTF8.GetBytes(str);
    base64 := TNetEncoding.Base64.EncodeBytesToString(bytes);
    To decode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bytes := TNetEncoding.Base64.DecodeStringToBytes(base64);
    str := TEncoding.UTF8.GetString(bytes);
    The key message is the base64 encodes binary to text. That is often misunderstood.

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Avec un peu (beaucoup) de retard, merci !
    Je mélangeais 2 techniques (Soap.EncdDecd et TEncoding) pour cause de versions différentes entre client et serveur et apparemment, c'est bien ça qui coinçait.

    Bonne année

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  2. transfert de fichier P2P : connexion ????
    Par Stephen54 dans le forum Développement
    Réponses: 8
    Dernier message: 11/02/2005, 00h31
  3. Transfert de fichiers par sockets
    Par Kaori dans le forum C++
    Réponses: 19
    Dernier message: 26/01/2005, 13h58
  4. Transfert de fichier par ftp
    Par schub1015 dans le forum MFC
    Réponses: 3
    Dernier message: 14/01/2004, 17h53
  5. [Socket]Transfert de fichier
    Par Aminos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/04/2003, 13h58

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