以下方法发送 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);
}
我不知道你为什么要编写自己的 HTTP 协议代码。这很像编写您自己的 XML 解析器:无论您是多么优秀的程序员,您都一定会出错。
无论如何,作为数据输出流 http://docs.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html文档说明,正在做writeBytes
在字符串上只会丢弃其高八位。所以你得到的是......一些东西,但不是UTF8。你应该做的是:
String jsonString = new Gson().toJson(objectToEncode);
byte[] utf8JsonString = jsonString.getBytes("UTF8");
responseToClient.write(utf8JsonString, 0, utf8JsonString.Length);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)