Java: Gson and encoding



我在一个我需要通过http post post身体的gson中使用umlauts(ä,ü,Ö)。

不幸的是,如果umlauts没有以某种方式转换,我的Web应用程序将返回null,而不是。

内容类型是"应用/json"

我如何告诉gson正确编码umlauts(umlauts在值中,而不是密钥中)?

我遇到了同样的问题,将umlaut传递到JSON中的Web服务。Web服务器无法正确解码这些字符。通过配置用于编码问题的utf的HTTPClient消失了,这是我的工作代码:

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之前将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+ ";";
    }

最新更新