我有一個http服務器接收POST請求並從mysql數據庫提取數據。
這是服務器的相關部分:
utf8中的HTTP 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