HTTPBuilder在Grails中编码utf-8

时间:2015-04-16 14:50:30

标签: grails utf-8

我在Grails中使用HTTPBuilder时遇到问题。

代码是这样的。

def http = new HTTPBuilder("theURL")

http.request(method, ContentType.JSON) {
    uri.path = "theURI"

    headers.'Authorization' = "OAuth  $accessToken"
    headers.'Accept' = "application/json"
    headers.'content-type' = "application/json;charset=utf-8"

    response.success = { resp, json ->
        result = json
    }
}

return result

现在响应是带有“CobroN 1234”的JSON,但我需要“CobroNº1234”

我用curl尝试了这个并且响应很好“CobroNº1234”,这让我觉得问题是HTTPBuilder而不是我的API响应请求。

我认为这是响应编码的问题。

4 个答案:

答案 0 :(得分:1)

http.encoders.charset = Charsets.UTF_8

答案 1 :(得分:0)

试试这个:

headers.'content-type' = "application/JSON;charset=UTF-8" //capitalized

要么尝试这个:

@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")

答案 2 :(得分:0)

尝试在您的' http'之后添加此内容。声明:

http.encoderRegistry = new EncoderRegistry( charset: 'utf-8' )

答案 3 :(得分:0)

如果您要发送的内容需要使用UTF-8编码,或者您收到的内容需要使用UTF-8阅读,我无法关注。

我在使用UTF-8发送内容时遇到问题,这就是我所做的。

http.request(Method.PUT) { request ->
    // set headers here
    request.entity = new StringEntity(json.toString(), "UTF-8")
}

我正在将net.sf.json.JSONObject转换为String,以便将其作为PUT来电的正文传递。我正在使用StringEntity,之前我没有在StringEntity上设置编码,但是有一个构造函数需要编码。现在我在那里设置了“UTF-8”,它正在工作。