私はPOSTリクエストを受け取り、mysqlデータベースからデータを取得するhttpサーバーを持っています。
これは、サーバーの関連部分である:
utf8でのJava HTTPサーバーの応答
@Override
public void handle(HttpExchange he) throws IOException {
JSONArray jsonArr = null;
InputStreamReader isr = new InputStreamReader(he.getRequestBody(), "utf-8");
BufferedReader br = new BufferedReader(isr);
String query = br.readLine();
JSONObject postData=null;
try {
postData=Constants.parseQuery(query);
} catch (JSONException e) {
System.out.println("ERROR: SelectHandler,handle,parseQuery, on query: " + query);
}
// Object t=params.entrySet().
try {
query=Constants.getSelectQuery(postData);
jsonArr = MySQLQueryExecutor.getInstance().getItems(query);
} catch (JSONException e) {
System.out.println("ERROR: SelectHandler,handle,getItems, on query: " + query);
}
String encoding = "UTF-8";
String ret=jsonArr.toString();
he.getResponseHeaders().set("Content-Type", "application/json; charset=" + encoding);
he.sendResponseHeaders(200, ret.length());
System.out.println(ret);
OutputStream os = he.getResponseBody();
ret= URLDecoder.decode(ret, "UTF-8");
os.write(ret.toString().getBytes());
os.close();
}
私は、サーバーが要求を処理し、応答を送信していることがわかりますが、クライアント側で、私はエラーを取得します。
エラーはレスポンスのutf8文字によるものです(ヘブライ文字を省略すると、エラーはなくなります)。
どうすればこの問題を解決できますか?これはサーバーまたはクライアントの問題ですか?
「URLDecoder」はあなたが望むものではありません。あなたは文字列のUTF8バイトを書く必要があります。 – SLaks
os.write(ret.getBytes(encoding));あなたが意味するものが助けにならない場合 –
あなたは実際にどのような応答を受けていますか? – SLaks