小编fnf*_*fnf的帖子

有没有办法将UTF-8与app引擎一起使用?

我正在寻找关于app引擎如何处理字符编码的一些解释.我正在研究服务器在app引擎上的客户端 - 服务器应用程序.

这是一个从头开始构建的新应用程序,因此我们在任何地方都使用UTF-8.客户端通过POST,x-www-form-urlencoded向服务器发送一些字符串.我收到它们并回复它们.当客户收回它时,它是ISO-8859-1!在POST到blobstore时我也看到了这种行为,参数发送为UTF-8,multipart/form-data编码.

为了记录,我在Wireshark中看到了这一点.所以我100%确定我发送UTF-8并收到ISO-8859-1.另外,我没有看到mojibake:ISO-8859-1编码的字符串非常好.这也不是误解内容类型的问题.这不是客户.一路走来正确地认识到我正在发送UTF-8参数,但出于某种原因正在将它们转换为ISO-8859-1.

我认为ISO-8859-1是GAE servlet的默认字符编码.我的问题是,有没有办法告诉GAE不要转换为ISO-8859-1,而是在任何地方使用UTF-8?

假设servlet做了这样的事情:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("application/json");
    String name = req.getParameter("name");
    String json = "{\"name\":\"" + name + "\"}";
    resp.getOutputStream().print(json);
}
Run Code Online (Sandbox Code Playgroud)

我尝试设置响应的字符编码并请求"UTF-8",但这并没有改变任何东西.

提前致谢,

java google-app-engine servlets character-encoding

15
推荐指数
2
解决办法
8419
查看次数

GAE HDR:按键的实体检索最终是否在XG事务中保持一致?

考虑"使用事务"中的第二个示例("使用命名密钥更新实体,或者如果它尚不存在则创建它"):

https://developers.google.com/appengine/docs/java/datastore/transactions

现在考虑这种情况.多人游戏只允许任意两个玩家之间的单一匹配.为了确保这一点,使用每个玩家的键创建一个键.此键用作UniqueMatch实体的键.

因此,为了创建匹配,将创建XG事务.在此交易中:

  1. 我们检查是否已经存在具有该密钥的UniqueMatch实体.如果使用该键的datastore.get()调用没有抛出EntityNotFoundException,那么我们知道这两个玩家之间的匹配已经存在,所以我们回滚()并向玩家显示错误消息.

  2. 我们将()所有需要放入的实体放入以创建匹配项.这包括UniqueMatch实体以及其他一些实体.

  3. 然后提交事务.

这似乎工作正常.但是,我注意到我可以在短时间内在任意两个玩家之间创建两场比赛.在一小段时间内(实际上其中一个测试中最多10-20秒),我对datastore.get(key)的调用抛出了EntityNotFoundException,即使该键已经被put().

这似乎是最终的一致性.但是,关键的实体回顾不是保证强烈一致吗?此保证是否受到在XG交易中完成的事实的影响?

提前致谢,

java google-app-engine transactions eventual-consistency google-cloud-datastore

10
推荐指数
1
解决办法
253
查看次数