UTF-8字符串在GAE上被Restlet加扰

Joh*_*dol 6 google-app-engine servlets utf-8 character-encoding restlet-2.0

我在AppEngine上托管了一个简单的Restlet服务.这使用字符串执行基本的CRUD操作,当我用curl测试它时(对于所有动词),它适用于各种UTF-8字符.

这是由托管在另一个AppEngine应用程序上的servlet中的简单重定向客户端使用的:

// 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());
Run Code Online (Sandbox Code Playgroud)

以上就是我在servlet中的全部内容.很朴实.

servlet是通过jquery ajax调用的,我得到的json很好地形成了所有东西,但问题是UTF-8编码的字符串会被重新加扰,例如: Université de Montréal变为Universit?? de Montr??al.

我尝试在servlet中添加这一行(在其他所有内容之前):

resp.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)

但唯一不同的是,我没有??得到Universit?? de Montr??al(我甚至不知道那是什么样的人物,亚洲我想).

我100%确定restlet服务是正常的,因为除了逐行调试之外,我能够从cmd行测试它与curl并且它返回格式良好的字符串.

通过查看来自firefox的响应的http头(当通过javascript调用servlet时),我可以看到编码确实是UTF-8,正如预期的那样.经过几个小时的努力阅读每一个可能的相关文章后,我遇到了这个重新讨论, 并注意到我确实Transfer-Encoding: chunked在响应的http标题上.我想提出的解决方案(覆盖ClientResource.toRepresentation,没有任何好处,所以我尝试作为susggested用的Restlet 2.1 ClientResource.setRe?questEntityBuffering?(true),没有运气有其一),但我不相信我的问题是有关 Transfer-Encoding: chunked 在所有.

在这一点上,我没有想法,我真的很感激任何建议!O_O

更新:

我尝试使用经典的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()); 
Run Code Online (Sandbox Code Playgroud)

因为所有的RESTful和幻想......但我仍然不知道为什么原始版本不起作用!:/

Joh*_*dol 1

我尝试使用经典的 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());
Run Code Online (Sandbox Code Playgroud)

非常安静和花哨......但我仍然不知道为什么原始版本不起作用!:/