Le codage Java UTF-8 ne fonctionne pas HttpURLConnection

J’ai essayé de faire un appel après et de passer une entrée avec cette valeur – “ä € آ ที่” J’ai un message d’erreur

{"error":{"code":"","message":{"lang":"en-US","value":{"type":"ODataInputError","message":"Bad Input: Invalid JSON format"}}}} 

C’est mon code

  conn.setRequestMethod(ConnectionMethod.POST.toSsortingng()); conn.setRequestProperty(CONTENT_LENGTH, Integer.toSsortingng(content.getBytes().length)); conn.setRequestProperty("Accept-Charset", "UTF-8"); conn.setUseCaches(false); conn.setDoInput(true); conn.setDoOutput(true); DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.writeBytes(content); wr.flush(); wr.close(); InputStream resultContentIS; Ssortingng resultContent; try { resultContentIS = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(resultContentIS)); SsortingngBuilder sb = new SsortingngBuilder(); Ssortingng line; while ((line = reader.readLine()) != null) { sb.append(line); } 

il est tombé sur conn.getInputStream ();

La valeur du contenu est

 { "input" : "ä€愛لآहที่" } 

Cela fonctionne où l’entrée est une chaîne ou un entier

Quand j’ai ajouté la déclaration

  conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 

J’ai un message différent

  {"error":{"code":"","message":{"lang":"en-US","value":{"type":"Error","message":"Internal server error"}}}} 

S’il vous plaît essayez ce code ci-dessous:

 DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8")); writer.write(content); writer.close(); wr.close(); 

Vous devez utiliser JSONObject pour passer des parameters

L’entrée, s’il vous plaît essayez

 BufferedReader reader = new BufferedReader(new InputStreamReader(resultContentIS, "UTF-8")); 

Si le résultat est: ???????, alors ne vous inquiétez pas, votre console de sortie ne prend pas en charge UTF-8.

Il semble que le contenu de votre variable contienne déjà des données erronées, car vous avez peut-être converti une chaîne sans faire attention au codage requirejs.

Définir l’encodeur correct sur le rédacteur et utiliser write() au lieu de writeBytes() devrait valoir la peine d’essayer.

Vous devez envoyer le contenu via tableau d’octets

  DataOutputStream outputStream= new DataOutputStream(conn.getOutputStream()); outputStream.write(content.toSsortingng().getBytes()); 

Ceci est une solution complète pour vos problèmes de caractère de nom de fichier. Le point importé est une chaîne d’envoi via un tableau d’octets. Chaque caractère change via un caractère octet. C’est éviter vos problèmes d’encodage de caractères.