我在Gson中使用Umlauts(ä,ü,ö),我需要通過Http Post Body傳遞。Java:Gson和編碼
不幸的是,我的web應用程序將返回null,如果變音沒有被轉換,他們不是。
內容類型是「應用/ JSON」
我如何告訴GSON正確編碼變音(中變音是在價值觀,而不是鑰匙)?
我在Gson中使用Umlauts(ä,ü,ö),我需要通過Http Post Body傳遞。Java:Gson和編碼
不幸的是,我的web應用程序將返回null,如果變音沒有被轉換,他們不是。
內容類型是「應用/ JSON」
我如何告訴GSON正確編碼變音(中變音是在價值觀,而不是鑰匙)?
在傳遞給gson之前,可以將Umlauts編碼爲十進制實體。從json中你可以解碼這些實體的 。
/* encode unicode characters in a given string */
private static String getEncodedText(String text) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
int codePoint = text.codePointAt(i);
if (codePoint >= 0 && codePoint <= 126
&& (codePoint != 34 && codePoint != 39
&& codePoint != 60 && codePoint != 62
&& codePoint != 94 && codePoint != 96 && codePoint != '_')) {
sb.append(ch);
continue;
}
sb.append(convertToEntity(String.valueOf(codePoint)));
}
return sb.toString();
}
public static String convertToEntity(String decimalValue) {
return "&#" + decimalValue+ ";";
}
我該怎麼做?通常我只是爲了toGson(對象)。 – cdbeelala89
將值設置爲要轉換的對象變量ti json將上述方法應用於編碼字符串。 –
我有同樣的問題將變音符傳遞給JSON中的Web服務。 網絡服務器無法正確解碼這些字符。通過配置HttpClient的爲UTF編碼問題就消失了,這是我的工作代碼:
HttpParams httpParams = new BasicHttpParams();
HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8);
HttpProtocolParams.setHttpElementCharset(httpParams, HTTP.UTF_8);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost request = new HttpPost(serverURL);
StringEntity str = null;
String jsonString = gson.toJson(yourdata);
str = new StringEntity(jsonString, HTTP.UTF_8);
request.setEntity(str);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
client.execute(request);
謝謝,httpParams在我的情況下是缺失的部分。 – Locked
「我的web應用程序將返回null,如果變音不以某種方式轉換」,所以這個問題是web應用程序。 –
這是一個MVC 4應用程序,如果有幫助。應該接受沒有編碼在體內的變音符號? – cdbeelala89
'application/json'必須接受Unicode(因此也就是Umlauts)。[spec](http://www.ietf.org/rfc/rfc4627.txt):_「JSON文本應以Unicode編碼。默認編碼是UTF-8。「_如果Web應用程序不接受這個,它不接受JSON。 – McDowell