2015-04-16 21 views
5

我在使用Grails中的HTTPBuilder時遇到了問題。HTTPBuilder在Grails中編碼utf-8

代碼是這樣的。

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 

現在的反應是「Cobroñ1234」一個JSON,但我需要「CobroNº1234」

我試圖與捲曲和響應是好的「CobroNº1234」,這讓我覺得問題在於HTTPBuilder,而不是我的API來響應請求。

我認爲這是一個響應編碼的問題。

+0

你打的端點是公共的嗎? – Opal

+0

是salesforce中的認證API(但我刪除了片段中的這部分代碼) – dimartiro

+0

您是否嘗試將'content-type'設置爲'application/json; charset = utf-8'? – dmahapatro

回答

0

試試這個:

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

要麼,試試這個:

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

問題仍然存在 – dimartiro

0

嘗試的 'HTTP' 聲明之後添加此:

http.encoderRegistry = new EncoderRegistry(charset: 'utf-8') 
1
http.encoders.charset = Charsets.UTF_8 
+0

儘管這段代碼片段可能解決了這個問題,[包括解釋](https:///meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高你的文章的質量。請記住,你正在回答未來讀者的問題,而這些人可能不知道你的代碼建議的原因,也請儘量不要用解釋器來擠佔你的代碼y評論,這會降低代碼和解釋的可讀性! –

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.JSONObjectString,以沿將它作爲PUT調用的身體。我使用的是StringEntity,之前我沒有在StringEntity上設置編碼,但有一個構造函數需要編碼。現在我正在設置「UTF-8」,它正在工作。