json 文字列に関して問題があります。ドイツ語のウムラウトを含む Apache http クライアントで取得しています。
json 文字列のマッピングは、文字列にドイツ語のウムラウトが含まれていない場合にのみ機能します。
Apache http クライアントは「Accept-Charset」を HTTP.UTF-8 に設定されていますが、その結果、「ü」ではなく「\u00fc」が常に取得されます。たとえば「\u00fc」を「ü」に手動で置き換えると、マッピングは完璧に機能します。
Apache http クライアントから utf-8 でエンコードされた json 応答を取得するにはどうすればよいですか? または、サーバー出力に問題がありますか?
params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
httpclient = new DefaultHttpClient(params);
httpclient = new DefaultHttpClient(params);
HttpGet httpGetContentLoad = new HttpGet(url);
httpGetContentLoad.setHeader("Accept-Charset", "utf-8");
httpGetContentLoad.setParams(params);
response = httpclient.execute(httpGetContentLoad);
entity = response.getEntity();
String loadedContent = null;
if (entity != null)
{
loadedContent = EntityUtils.toString(entity, HTTP.UTF_8);
entity.consumeContent();
}
if (HttpStatus.SC_OK != response.getStatusLine().getStatusCode())
{
throw new Exception("Loading content failed");
}
closeConnection();
return loadedContent;
json コードは次のようにマップされます。
String jsonMetaData = loadGetRequestContent(getLatestEditionUrl(newspaperEdition));
Newspaper loadedNewspaper = mapper.readValue(jsonMetaData, Newspaper.class);
loadedNewspaper.setEdition(newspaperEdition);
更新 1: JsonMetaData は、フェッチされた json コードを含む String 型です。
アップデート2:
json出力を変換するために使用するこのコードには、次のものが必要です。
public static String convertJsonLatestEditionMeta(String jsonCode)
{
jsonCode = jsonCode.replaceFirst("\\[\"[A-Za-z0-9-[:blank:]]+\",\\{", "{\"edition\":\"an-a1\",");
jsonCode = jsonCode.replaceFirst("\"pages\":\\{", "\"pages\":\\[");
jsonCode = Helper.replaceLast(jsonCode, "}}}]", "}]}");
jsonCode = jsonCode.replaceAll("\"[\\d]*\"\\:\\{\"", "\\{\"");
return jsonCode;
}
Update3: JSON 変換例:
変換前のjsoncode:
["Newspaper title",
{
"date":"20130103",
"pages":
{
"1": {"ressort":"ressorttitle1","pdfpfad":"pathToPdf1","number":1,"size":281506},
"2":{"ressort":"ressorttitle2","pdfpfad":"pathToPdf2","number":2,"size":281533},
[...]
}
}
]
変換後の Jsoncode:
{
"edition":"Newspaper title",
"date":"20130103",
"pages":
[
{"ressort":"Resorttitle1","pdfpfad":"pathToPdf1","number":1,"size":281506},
{"ressort":"Resorttitle2","pdfpfad":"pathToPdf2","number":2,"size":281533},
[...]
]
}
解決策: @Borisが提案したようにGSONの使用を開始し、ウムラウトに関する問題はなくなりました! さらに、GSON は実際には Jackson Json よりも速いようです。
回避策は、この表に従って文字を手動で置き換えることです。
Sign Unicode representation
Ä, ä \u00c4, \u00e4
Ö, ö \u00d6, \u00f6
Ü, ü \u00dc, \u00fc
ß \u00df
€ \u20ac