总结
我无法解决字符串编码和 GAE 问题。基本上我有一个经典的编码问题,像 ñ、é、ü 这样的特殊字符在数据存储查看器和客户端中都显示为 ��,但是,仅在生产模式下。
我通过两种机制将数据保存到数据存储区: - 用户输入:这在开发模式和生产模式下都很完美 - 第 3 方 API:这一个适用于开发模式但不适用于生产
跟随数据
- 当我向第 3 方 API 请求数据时,响应 header 告诉我数据采用 UTF-8 格式。如果我看到响应内容,我可以很好地读取数据
Content-Type:text/html; charset=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>
我不知道还能做些什么来修复它。有人有解决此问题的方法吗?
最佳答案
不幸的是,由于此处缺少答案,我认为没有办法将 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/