GSON not sending in UTF-8

gson, java

Solution

I have no idea why you would write your own HTTP protocol code. It's a lot like writing your own XML parser: No matter how good a programmer you are, you are bound to get it wrong.

Anyway, as the DataOutputStream documentation states, doing `writeBytes` on a String will just discard its high eight bits. So what you get is... something, but not UTF8. What you should do is:

String jsonString = new Gson().toJson(objectToEncode);
byte[] utf8JsonString = jsonString.getBytes("UTF8");
responseToClient.write(utf8JsonString, 0, utf8JsonString.Length);

Problem

The following method sends a JSON reply. However on the receiving end I keep getting invalid characters, and UTF-8 isn't decoding the data. What am I doing wrong? Response to client = data output stream ``` //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); } ```

Original source