下面的方法发送一个JSON答复。但是在接收端,我总是得到无效的字符,而UTF-8没有解码数据。我做错了什么?
对client =数据输出流的响应
//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);
}发布于 2013-06-13 02:37:53
我不知道您为什么要编写自己的HTTP协议代码。这很像编写自己的XML解析器:无论您是多么优秀的程序员,您都一定会弄错的。
无论如何,正如DataOutputStream文档所述,对字符串执行writeBytes只会丢弃其高8位。所以你得到的是..。一些东西,但不是UTF8。你应该做的是:
String jsonString = new Gson().toJson(objectToEncode);
byte[] utf8JsonString = jsonString.getBytes("UTF8");
responseToClient.write(utf8JsonString, 0, utf8JsonString.Length);发布于 2019-11-12 15:34:20
第一个解决方案对我没用,我做了这个:
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String json = gson.toJson(objectToEncode);发布于 2017-03-21 10:36:11
使用以下代码进行编码
response.setCharacterEncoding("UTF8"); // this line solves the problem
response.setContentType("application/json");https://stackoverflow.com/questions/17078207
复制相似问题