2013-06-13 42 views
8

以下方法發送JSON回覆。但是在接收端,我一直收到無效字符,而UTF-8不解碼數據。我究竟做錯了什麼?GSON不以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); 

    } 
+0

什麼是'responseToClient'?你自己在編寫你的HTTP代碼嗎? –

+0

是的。 HTTP代碼已列出(也是responseToClient是DataOutputStream –

+0

@WilliamFalcon,我有ArrayList對象,其中包含許多中文和日文字符,我如何使用GSON庫序列化它們,通常意味着我將這些字符鬆開並獲取**?**而不是它們 –

回答

15

我不知道你爲什麼會寫自己的HTTP協議的代碼。這很像編寫自己的XML解析器:無論你是一個程序員多好,你都一定會錯誤的。

不管怎麼說,作爲DataOutputStream文檔狀態,在一根繩子上做writeBytes只會丟棄其高八位。所以你得到的是...什麼,但不是UTF8。你應該做的是:

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

我同意,那麼我會用什麼來爲我做這件事?你有沒有一個好的教程? –

+0

我認爲最輕量級的嵌入式HTTP java解決方案將是Jetty。http://www.eclipse.org/jetty /你可以在這裏找到很多很好的教程:http://wiki.eclipse.org/Jetty/Tutorial –

+0

謝謝。修正了問題(字節數組) –

0

使用下面的代碼編碼

response.setCharacterEncoding("UTF8"); // this line solves the problem 
response.setContentType("application/json"); 
相關問題