2017-08-28 5 views
0

J'ai une classe de requête json personnalisée pour télécharger des fichiers multi-parties sur ce serveur dans une application Android, ça fonctionne bien quand j'ajoute des mots anglais comme clés et valeurs (ces touches et valeurs sont une partie) mais quand j'utilise Mot arabe, il écrit des mots inconnus comme "'D * F * 9". Avant d'écrire ces valeurs dans l'objet ByteArrayOutputStream, tout fonctionne correctement, et je peux voir les mots arabes.
C'est la méthode get type de contenu du corps pour la toute classe
Comment ajouter des mots non-anglais en tant que partie de texte à une requête en plusieurs parties dans volley lib?

@Override 
public String getBodyContentType() { 
    return "multipart/form-data;charset=UTF-8;boundary=" + boundary; 
    //return "application/json; charset=UTF-8"; 
    //return "multipart/form-data; charset=UTF-8"; 
} 



Voici la version texte méthode de partie pour construire la partie du texte

private void buildTextPart(DataOutputStream dataOutputStream, String parameterName, String parameterValue) throws IOException { 
    dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd); 
    //dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + parameterName + "\"" + lineEnd); 
    dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + parameterName + "\"" + lineEnd); 
    dataOutputStream.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd); 
    //dataOutputStream.writeBytes("Content-Type: application/json; charset=UTF-8" + lineEnd); 
    Log.d("inside buildText", parameterName + " " + parameterValue); 
    dataOutputStream.writeBytes(lineEnd); 
    dataOutputStream.writeBytes(parameterValue + lineEnd); 
} 



Et ici le code que j'ai utilisé pour déboguer ces valeurs

// just for debugging 
     DataInputStream in = new DataInputStream(new ByteArrayInputStream (bos.toByteArray())); 
     Scanner scanner = new Scanner(in); 
     while (scanner.hasNext()){ 
      Log.d("scanner ", scanner.next()); 
     } 



J'ai lu ceci RFC document mais je ne comprends pas quel est le but de Content-Disposition et quelles sont ses valeurs. Que dois-je éditer dans ce code pour obtenir les valeurs arabes correctement?



Dois-je changer le type de contenu dans toutes les parties ou je peux faire que chaque partie ait son contenu Type?

Toute aide plz?

+0

'pour télécharger des fichiers multi-parties sur le serveur'? Qu'est-ce qu'un fichier en plusieurs parties? – greenapps

+0

La première partie a une image et une autre a des clés et des valeurs. –

+0

Un fichier ressemble à ça? Ne le pense pas. – greenapps

Répondre

0

Enfin, je trouve la réponse, le problème est dans cette ligne

dataOutputStream.writeBytes(parameterValue + lineEnd); 

Je mis à jour à

dataOutputStream.write(parameterValue.getBytes("utf-8")); 
dataOutputStream.writeBytes(lineEnd); 

pour obtenir tous les caractères de l'ONU ASCII, et maintenant il fonctionne très bien pour toutes les langues.