首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GSON不派UTF-8

GSON不派UTF-8
EN

Stack Overflow用户
提问于 2013-06-13 02:19:43
回答 3查看 54.5K关注 0票数 12

下面的方法发送一个JSON答复。但是在接收端,我总是得到无效的字符,而UTF-8没有解码数据。我做错了什么?

对client =数据输出流的响应

代码语言:javascript
复制
//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);

    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-13 02:37:53

我不知道您为什么要编写自己的HTTP协议代码。这很像编写自己的XML解析器:无论您是多么优秀的程序员,您都一定会弄错的。

无论如何,正如DataOutputStream文档所述,对字符串执行writeBytes只会丢弃其高8位。所以你得到的是..。一些东西,但不是UTF8。你应该做的是:

代码语言:javascript
复制
String jsonString = new Gson().toJson(objectToEncode);
byte[] utf8JsonString = jsonString.getBytes("UTF8");
responseToClient.write(utf8JsonString, 0, utf8JsonString.Length);
票数 26
EN

Stack Overflow用户

发布于 2019-11-12 15:34:20

第一个解决方案对我没用,我做了这个:

代码语言:javascript
复制
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String json = gson.toJson(objectToEncode);
票数 12
EN

Stack Overflow用户

发布于 2017-03-21 10:36:11

使用以下代码进行编码

代码语言:javascript
复制
 response.setCharacterEncoding("UTF8"); // this line solves the problem
 response.setContentType("application/json");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17078207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档