gpt4 book ai didi

google-app-engine - UTF-8 字符串被 GAE 上的 ReSTLet 扰乱

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:26 28 4
gpt4 key购买 nike

我在 AppEngine 上托管了一个简单的 ReSTLet 服务。这对字符串执行基本的 CRUD 操作,并且当我用 curl 测试它时(对于所有动词),它可以很好地处理各种 UTF-8 字符。

这由托管在另一个 AppEngine 应用程序的 servlet 中的简单 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 中的全部内容。很朴素。

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 header (当通过 javascript 调用 servlet 时),我可以看到编码确实是 UTF-8,正如预期的那样。经过几个小时的努力阅读我遇到的所有可能的相关文章this restlet discussion并注意到我确实在响应的 http header 上有 Transfer-Encoding: chunked 。我尝试了建议的解决方案(覆盖 ClientResource.toRepresentation,没有任何用处,所以我尝试了 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());

所有的 RESTful 和花哨的东西就这么多了……但我仍然不知道为什么原始版本不起作用! :/

最佳答案

我尝试使用经典的 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 和花哨的东西就这么多了……但我仍然不知道为什么原始版本不起作用! :/

关于google-app-engine - UTF-8 字符串被 GAE 上的 ReSTLet 扰乱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686645/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com