在Grails中编码utf-8的HTTPBuilder

在Grails中编码utf-8的HTTPBuilder,grails,utf-8,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.'cont

我在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”的JSON�� 1234“但我需要1234号科布罗”

我用curl尝试了这一点,响应很好“Cobro Nº1234”,这让我认为问题在于HTTPBuilder,而不是响应请求的API

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

尝试以下方法:

headers.'content-type' = "application/JSON;charset=UTF-8" //capitalized
或者,尝试以下方法:

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

尝试在“http”声明后添加此内容:

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

我无法理解您发送的内容是否需要使用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
转换为
字符串
,以便将其作为
PUT
调用的主体传递。我正在使用
StringEntity
,之前我没有在
StringEntity
上设置编码,但是有一个构造函数接受编码。现在我在那里设置了“UTF-8”,它就开始工作了。

您正在访问的端点是公共的?是salesforce中带有身份验证的API(但我在代码段中删除了这部分代码)。您是否尝试将
内容类型设置为
应用程序/json;charset=utf-8
?我尝试过,但问题仍然存在“Cobro N”�� 1234“
Accept Charset
也必须在标题中设置为
UTF-8
。问题仍然存在。虽然此代码片段可以解决问题,但确实有助于提高文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
http.request(Method.PUT) { request ->
    // set headers here
    request.entity = new StringEntity(json.toString(), "UTF-8")
}