fino ad ora ho usato il seguente frammento di codice al fine di inviare e ricevere stringhe JSON:Invio UTF-8 stringa utilizzando HttpURLConnection
static private String sendJson(String json,String url){
HttpClient httpClient = new DefaultHttpClient();
String responseString = "";
try {
HttpPost request = new HttpPost(url);
StringEntity params =new StringEntity(json, "UTF-8");
request.addHeader("content-type", "application/json");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
responseString = EntityUtils.toString(entity, "UTF-8");
}catch (Exception ex) {
ex.printStackTrace();
// handle exception here
} finally {
httpClient.getConnectionManager().shutdown();
}
return responseString;
}
Il codice di cui sopra ha funzionato perfettamente, anche se la stringa JSON contenuta UTF-8 chars, e tutto ha funzionato bene.
Per diverse ragioni, ho dovuto modificare il modo in cui invio richieste HTTP e utilizzare HttpURLConnection invece HttpClient di apache. Qui è il mio codice:
static private String sendJson(String json,String url){
String responseString = "";
try {
URL m_url = new URL(url);
HttpURLConnection conn = (HttpURLConnection)m_url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("content-type", "application/json");
DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
outputStream.writeBytes(json);
outputStream.flush();
outputStream.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line+"\n");
}
br.close();
responseString = sb.toString();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return responseString;
}
Questo codice funziona bene per le normali caratteri inglesi, ma non sembra supportare i caratteri UTF-8 nella stringa JSON, poiché non ogni volta. (quando si invia json al server, il server si schiaccia dicendo che utf8 non può decodificare un certo byte, ma quando ricevo utf8 json dal server, penso che funzioni, dal momento che riesco a visualizzare i caratteri speciali).
Il server non è stato modificato e ha funzionato correttamente con il codice precedente, quindi il problema è al 100% su questo nuovo frammento di codice.
Qualche idea su come correggere l'invio della stringa json in modo da supportare UTF 8? Grazie
Perfetto. Grazie e buona giornata. – Jjang