【发布时间】:2014-01-14 12:32:01
【问题描述】:
总结
我遇到了无法解决的字符串编码和 GAE 问题。基本上我有一个经典的编码问题,像 ñ、é、ü 等特殊字符在数据存储查看器和客户端中都显示为 ��,但是,仅在生产模式下。
我通过两种机制将数据保存到数据存储区: - 用户输入:这在开发模式和生产中都非常有效 - 第 3 方 API:这个适用于开发模式,但不适用于生产
跟踪数据
- 当我向第 3 方 API 请求数据时,响应标头告诉我数据采用 UTF-8 格式。如果我看到响应内容,我可以很好地读取数据
内容类型:文本/html;字符集=utf-8
- 此请求使用 gson 处理并转换为 java 类。据我所知,没有办法为gson指定char编码
- 然后我将数据带到数据存储区而不更改其编码(至少在我的应用程序点)
- 问题的第一个迹象:如果我查看生产数据存储区,编码已经丢失
- 在客户端 (GWT) 上,我收到同样以 UTF-8 编码的数据,但字符串已经有 �� 符号。
我已将 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>
我不知道还能做些什么来修复它。有没有人有解决这个问题的方法?
【问题讨论】:
-
令人困惑的是,它在开发模式而非生产模式下运行良好。 App Engine 上的数据存储区查看器显示特殊字符的事实 ????而不是正确编码的字符指向这样一个事实,即在某个地方,字符编码丢失了。如果 Web 服务(即您从中检索它的外部 API)已对其进行了正确编码,并且您只需将其设置在数据存储区中,那么一切都应该有效。
-
@Romin 我认为我的 Eclipse 设置为使用 UTF-8。这就是为什么它在开发模式下可以正常工作的原因。但不知何故,GAE 的生产 Java VM 必须使用不同的编码。我需要找出如何改变它...
标签: google-app-engine utf-8 character-encoding google-cloud-datastore gson