以下方法发送JSON回复.但是在接收端我不断收到无效字符,而UTF-8没有解码数据.我究竟做错了什么?
响应客户端=数据输出流
//Get the client request
clientRequest = new BufferedReader(new InputStreamReader(connectedClient.getInputStream())); //connectedclient = socket
//Start response object
responseToClient = new DataOutputStream(connectedClient.getOutputStream());
/**
* Sends a JSON response for an object
* @param objectToEncode
* @throws Exception
*/
private void sendJSONResponse(Object objectToEncode) throws Exception{
//Encode object into JSON
String jsonString = new Gson().toJson(objectToEncode);
// HTTP Header... Status code, last modified
responseToClient.writeBytes(HTTP_OK_STATUS_CODE);
responseToClient.writeBytes(CONTENT_TYPE_JSON);
responseToClient.writeBytes("Last-modified: "+ HelperMethods.now() +" \r\n");
responseToClient.writeBytes("\r\n");
// The HTTP content starts here
responseToClient.writeBytes(jsonString);
}
Run Code Online (Sandbox Code Playgroud)
Jan*_*aus 20
我不知道你为什么要编写自己的HTTP协议代码.这就像编写自己的XML解析器一样:无论你是多么优秀的程序员,你一定会弄错它.
无论如何,正如DataOutputStream文档所述,writeBytes对String执行操作只会丢弃其高8位.所以你得到的是......某些东西,但不是UTF8.你应该做的是:
String jsonString = new Gson().toJson(objectToEncode);
byte[] utf8JsonString = jsonString.getBytes("UTF8");
responseToClient.write(utf8JsonString, 0, utf8JsonString.Length);
Run Code Online (Sandbox Code Playgroud)
第一个解决方案对我不起作用,我这样做了:
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String json = gson.toJson(objectToEncode);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35348 次 |
| 最近记录: |