pory używałem następujący fragment kodu w celu wysyłania i odbierania ciągów JSON:Wysyłanie UTF-8 przy użyciu ciąg 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;
}
Powyższy kod działa wyśmienicie nawet jeśli ciąg json zawierały UTF-8 znaki i wszystko działało dobrze.
Z kilku powodów musiałem zmienić sposób wysyłania żądań HTTP i używać HttpURLConnection zamiast HttpClient Apache'a. Oto mój kod:
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;
}
Ten kod działa dobrze dla zwykłych znaków angielskich, ale nie wydaje się, aby obsługiwać UTF-8 znaków w ciąg json, gdyż nie za każdym razem. (podczas wysyłania json do serwera, serwer miażdży mówiąc, że utf8 nie może dekodować określonego bajtu, ale kiedy otrzymuję utf8 json z serwera, wydaje mi się, że działa, ponieważ udało mi się zobaczyć znaki specjalne).
Serwer w ogóle się nie zmienił i działał poprawnie z poprzednim kodem, więc problem dotyczy w 100% nowego fragmentu kodu.
Każdy pomysł, jak naprawić ciąg znaków json, aby mógł obsługiwać kodowanie UTF 8? Dzięki
Perfect. Dziękuję i życzę miłego dnia. – Jjang