7

Http Post Bodyを介して渡す必要があるGsonでウムラウト(ä、ü、ö)を使用しています。

残念ながら、Umlautsが何らかの方法で変換されていない場合、私のWebアプリはnullを返しますが、変換されていません。

コンテンツタイプは「application/json」です

Umlautsを適切にエンコードするようにGsonに指示するにはどうすればよいですか(Umlautsはキーではなく値に含まれています)?

4

3 に答える 3

6

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);
于 2013-06-24T15:08:34.070 に答える
2

あなたは設定しようとすることができます

charset=UTF-8

エンコーディングを強制します。

于 2012-12-19T11:46:04.227 に答える
0

gson に渡す前に、ウムラウトを 10 進エンティティにエンコードできます。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+ ";";
    }
于 2012-12-19T11:57:27.763 に答える