当前位置: 首页 > 面试题库 >

有没有办法将UTF-8与App Engine一起使用?

夹谷腾
2023-03-14
问题内容

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

这是一个从头开始构建的新应用程序,因此我们到处都使用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编码的字符串非常好。这也不是错误解释Content-
Type的问题。不是客户 这种方式可以正确识别我正在发送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);
}

我尝试将响应和请求的字符编码设置为“ UTF-8”,但这没有任何改变。

提前致谢,


问题答案:

找到了一种解决方法。这是我的方法:

  • 使用“ application / json; charset = UTF-8”作为内容类型。或者,将响应字符集设置为“ UTF-8”(两个都可以正常工作,不需要同时执行两个操作)。

  • Base64编码的输入字符串不是ASCII安全的,而是UTF-8。否则,当他们到达servlet时,显然会转换为ISO-8859-1。

  • 使用resp.getWriter()而不是resp.getOutputStream()来打印JSON响应。

在满足 所有 这些条件之后,我终于能够将UTF-8输出回客户端。



 类似资料:
  • 问题内容: java.lang.RuntimeException是“不要为AdapterView调用setOnClickListener。您可能需要setOnItemClickListener,”但这是不正确的。我正在使用setOnItemClickListener根据新选择执行某些操作,但是在用户更改选择之前,我还需要执行一些操作。具体来说,由于每个选择都与不同的数据集相关联,因此我正在收集每个

  • GeoFire与实时数据库紧密耦合,而地理查询是许多希望迁移到FireStore的应用程序的常见功能依赖项。有没有办法在Firestore环境中复制位置的散列/检索?

  • 我正在生成AES-256密钥使用: 有没有办法将字节数组看作字符串?对我有效的唯一方法是: 如果我打印并复制字符串,并尝试使用在线Base64解码器对其进行解码,它会抱怨字符串不是UTF-8。 我知道它违背了加密的目的,但有没有办法可以将静态32个字符长的字符串分配为密钥?

  • 我想和rapidjson一起工作。 我想生成字符串并将其添加到某个对象中。 我在使用qjson时使用了std::字符串,但在rapidjson的情况下似乎不合适。我不想生成字符串,然后复制它,字符串对象的生存期在对象()生存期之前结束(因此不是一个情况)。json中可能有\0,所以,用空终止字符串也不是一个解决方案。 所以,我必须写我自己的字符串类型?或者使用类似 或者还有其他一些处理字符串的方法

  • 问题内容: 这里有两个问题。我有一组通常是带有BOM的UTF-8文件。我想将它们(理想情况下)转换为没有BOM的UTF-8。似乎可以解决这个问题。但是我真的看不到任何有关用法的好例子。这将是处理此问题的最佳方法吗? 同样,如果我们能够处理清楚知道的不同输入编码(看到的ASCII和UTF-16),那将是理想的。看来这一切都是可行的。是否有一种解决方案可以采用任何已知的Python编码并以UTF-8格

  • 我尝试用JasperReport导出CSV文件,问题是当我想打印像“€”这样的货币时。 当我搜索解决方案时,我意识到这是关于文件编码的!我写这个代码! JasperReport导出的文件编码在“没有BOM的UTF-8”上。所以当我用Excel打开文件时,“€”看起来像“,”。但是当我用记事本打开文件时,“€”看起来像“€”。 在记事本上,我将文件编码转换为UTF-8(我认为是BOM),我保存文件。