我在需要通过 Http Post Body 传递的 Gson 中使用变音符号 (ä,ü,ö)。
不幸的是,如果 Umlauts 没有以某种方式转换,我的 Web 应用程序将返回 null,而它们不是。
内容类型是“应用程序/json”
我如何告诉 Gson 正确编码元音变音(元音变音在值中,而不是键中)?
我在将变音符号传递给 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);
你可以尝试设置
charset=UTF-8
强制编码。
您可以在传递给 gson 之前将变音符号编码为十进制实体。从 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+ ";";
}