google-app-engine - GAE 数据存储 : can't get UTF-8 to work as default encoding

标签 google-app-engine utf-8 character-encoding google-cloud-datastore gson

总结

我无法解决字符串编码和 GAE 问题。基本上我有一个经典的编码问题,像 ñ、é、ü 这样的特殊字符在数据存储查看器和客户端中都显示为 ��,但是,仅在生产模式下

我通过两种机制将数据保存到数据存储区: - 用户输入:这在开发模式和生产模式下都很完美 - 第 3 方 API:这一个适用于开发模式但不适用于生产

跟随数据

  • 当我向第 3 方 API 请求数据时,响应 header 告诉我数据采用 UTF-8 格式。如果我看到响应内容,我可以很好地读取数据

    Content-Type:text/html; charset=utf-8

  • 此请求使用 gson 处理并转换为 java 类。据我所知,没有办法为gson指定一个char编码
  • 然后我将数据带到数据存储而不更改其编码(至少在我的应用程序点)
  • 问题的第一个征兆:如果我查看生产数据存储,编码已经丢失
  • 在客户端 (GWT) 上,我收到数据,同样以 UTF-8 编码,但字符串已经有 �� 个符号。
开发模式 VS 生产

我的 Eclipse 配置为 UTF-8。我认为这是在开发模式下一切都运行良好的主要原因。

我还没有找到如何将生产 JVM 设置为 UTF-8(我读到 here 默认是 US-ASCII,可能无法更改) - 在开发模式下,我将 eclipse 配置为使用 UTF-8 - 在生产模式下,我遵循了 this guy 的建议但它不会改变行为:

Top-level appengine-web.xml:

<system-properties>
    <!-- Configure java.util.logging -->
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
    <!-- UTF-8 Support -->
    <property name="file.encoding" value="UTF-8" />

</system-properties>

<!-- UTF-8 Support -->
<env-variables>
    <env-var name="DEFAULT_ENCODING" value="UTF-8" />
</env-variables>

我不知道还能做些什么来修复它。有人有解决此问题的方法吗?

最佳答案

不幸的是,由于此处缺少答案,我认为没有办法将 UTF-8 设置为 GAE 生产 JVM 上的默认编码。

在上面困扰我的情况下,我的问题是我正在使用默认编码读取第 3 方 API 请求,在生产 GAE 中是 US-ASCII:

BufferedReader reader = 
    new BufferedReader(new InputStreamReader(url.openStream());

将上面的行更改为

BufferedReader reader = 
    new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8");

解决问题。

关于google-app-engine - GAE 数据存储 : can't get UTF-8 to work as default encoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113650/

相关文章:

google-app-engine - 替代 Google Cloud Function 的替代方法

google-app-engine - App Engine 上的云存储和安全下载策略。 GCS acl 或 blobstore

java - 硬删除的对象仍然出现在 AppEngine 管理控制台中

Python 统一码 : how to replace character that cannot be decoded using utf8 with whitespace?

ios - 服务器的引号 (") appears as "â"在 iOS 应用程序中

google-app-engine - 有没有办法在 Google App Engine 上执行聚合函数?

ruby - 将字符串转换为实际的 UTF-8 字符

php - PHP 中的元音编码错误

java - JVM 如何确定 argv 在 Linux 上的(默认?)字符编码

PERL:如何检测字符串编码以便我可以使用正确的字符集