bis jetzt habe ich den folgenden Code-Schnipsel, um zu senden und empfangen JSON-Strings:Senden UTF-8-String mit 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;
}
Der obige Code perfekt gearbeitet, auch wenn die json-String enthalten UTF-8 Chars, und alles hat gut funktioniert.
Aus verschiedenen Gründen musste ich die Art ändern, wie ich HTTP-Postanfragen sende und stattdessen HttpURLConnection anstelle von Apache's HttpClient verwende. Hier ist mein Code:
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;
}
Dieser Code funktioniert gut für normale englische Zeichen, aber scheint nicht UTF-8-Zeichen in dem JSON-String zu unterstützen, da sie jedes Mal versagt. (Beim Senden von JSON zum Server, zerbricht der Server mit der Aussage, dass utf8 ein bestimmtes Byte nicht dekodieren kann, aber wenn ich utf8 json vom Server empfange, denke ich, dass es funktioniert, da ich die Sonderzeichen anzeigen kann).
Server hat sich überhaupt nicht geändert und funktionierte gut mit vorherigem Code, so ist das Problem 100% auf diesem neuen Codeausschnitt.
Haben Sie eine Idee, wie Sie die JSON-Zeichenkette reparieren, so dass UTF 8 unterstützt wird? Dank
Perfect. Danke und haben Sie einen guten Tag. – Jjang