1

私は、ヘブライ文字を含むアプリ エンジン サーバーからデータを取得する必要があるプロジェクトに取り組んでいます (データは json で送信されます)。

サーバー側:

resp.setHeader("Content-Type", "application/json; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print(responeData.toString());

サーバーをデバッグしているときに、応答データが問題ないように見えます (つまり、ヘブライ文字が表示されています。

クライアント側 (アンドロイド):

このコードを実行した後、私が取得しているresultDataは??? 代わりにヘブライ文字。「windows-1255」、「iso-8859-8」など、さまざまなエンコーディングをすべて試しました。問題が何であるか知っている人はいますか? ありがとう!

// Create new default http client
    HttpClient client = new DefaultHttpClient();
    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout Limit
    HttpConnectionParams.setSoTimeout(client.getParams(), 10000);
    HttpResponse response;
    HttpPost post = new HttpPost(serviceURL);

    try {
        StringEntity se = new StringEntity(requestPayload.toString());
        post.addHeader(CustomHeader.TASK_NAME.getHeaderName(), taskName);
        se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        post.setEntity(se);

        // Execute the request
        response = client.execute(post);

        // Get the response status code
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();

        if (statusCode == 200) { // Ok
            if (response != null) { // Checking response
                InputStream in = response.getEntity().getContent(); // Get the data in the entity
                retreturnVal = HttpCaller.readContentFromIS(in);
            }
        }
    } catch (Exception e) {
        Log.e("Error in connectivity layer, stacktrace: ", e.toString());
        return null;
    }

    public static String readContentFromIS(InputStream in) throws IOException {
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(in, "UTF-8"), 8);
    StringBuffer sb = new StringBuffer();
    String line = "";
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
    return sb.toString();       
}
4

2 に答える 2

2

ServletResponseを呼び出す代わりに、サーバーでを使用していると仮定します。

resp.setHeader("Content-Type", "application/json; charset=UTF-8");

あなたは電話するべきです

resp.setContentType("application/json; charset=UTF-8");

これにより、呼び出しで使用されるエンコーディングgetWriter()が UTF-8 に変更されます。setHeader呼び出しに同じ副作用があるとは思いません。

于 2012-08-19T01:36:23.200 に答える
0

私は同じ問題を抱えていましたが、そうしました

 StringEntity se = new StringEntity(requestPayload.toString(), "UTF-8");

それ以外の

 StringEntity se = new StringEntity(requestPayload.toString());

それは私にとってはうまくいきます、それは別の解決策です。

于 2012-09-07T17:54:43.793 に答える