我在AppEngine上託管了一個簡單的Restlet服務。這使用字符串執行基本的CRUD操作,並且當我使用curl對所有動詞進行測試時,它可以很好地處理各種UTF-8字符。在幾乎所有我在servletUTF-8字符串被GAE上的Restlet加擾
// set response type
resp.setContentType("application/json");
// Create the client resource
ClientResource resource = new ClientResource(Messages.SERVICE_URL + "myentity/id");
// Customize the referrer property
resource.setReferrerRef("myapp");
// Write the response
resource.get().write(resp.getWriter());
以上:
這是由一個Servlet託管在其他的AppEngine應用一個簡單的Restlet客戶機消耗的。很樸實。
該servlet通過jQuery AJAX調用,那我回去了JSON是良好和一切,但問題是,UTF-8編碼字符串回來炒,例如: Université de Montréal
成爲Universit?? de Montr??al
。
我試圖在servlet中加入這一行(一切前):
resp.setCharacterEncoding("UTF-8");
但唯一性差異的是,而不是讓??
我得到Universitᅢᄅ de Montrᅢᄅal
(我甚至不知道什麼樣的角色的那些是,亞洲我想)。
我100%確定restlet服務是可以的,因爲除了一行一行的調試以外,我可以使用curl從cmd行測試它,它返回格式良好的字符串。
通過查看來自firefox的響應的http頭(當通過javascript調用servlet時),我可以看到編碼的確如預期的那樣是UTF-8。經過幾個小時的努力閱讀每一個可能的相關文章,我碰到this restlet discussion,並注意到,確實我有Transfer-Encoding: chunked
在響應的http頭上。我想提出的解決方案(覆蓋ClientResource.toRepresentation,沒有任何好處,所以我嘗試的Restlet 2.1與ClientResource.setRequestEntityBuffering(true)
susggested,沒有運氣有其一),但我不相信我的問題是,在所有有關Transfer-Encoding: chunked
。
此時我出於想法,我會真的感謝任何建議! O_O
UPDATE:
我試圖做一個經典的URLConnection手動GET和字符串回來好嗎:
URL url = new URL(Messages.SERVICE_URL + "myentity/id");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
StringWriter writer = new StringWriter();
IOUtils.copy(is, writer, "UTF-8");
resp.getWriter().print(writer.toString());
這麼多的是所有的RESTful和花哨的......但仍然我不知道爲什麼原始版本不起作用! :/
分塊傳輸編碼應該與字符集問題無關......如果將有問題的原始字符串寫入'resp.getWriter()',完全繞過restlet,是否正確傳輸? – bdonlan 2011-12-31 06:12:07
您的意思是通過從servlet執行「手動」GET來獲得我的服務? – JohnIdol 2011-12-31 06:36:14
看到更新,如果我繞過restlet,它工作正常。我想這是一個restlet錯誤或smt O_o – JohnIdol 2011-12-31 07:12:38