Google app engine GAE数据存储:can';t让UTF-8作为默认编码工作
摘要 我有一个无法解决的字符串编码和GAE问题。基本上,我有一个经典的编码问题,像ñ,é,ü这样的特殊字符��� 在数据存储查看器和客户端中,但仅在生产模式下 我通过两种机制将数据保存到数据存储: -用户输入:这在开发模式和生产模式下都非常有效 -第三方API:此API在开发模式下工作,但不在生产模式下工作 在数据之后Google app engine GAE数据存储:can';t让UTF-8作为默认编码工作,google-app-engine,utf-8,character-encoding,google-cloud-datastore,gson,Google App Engine,Utf 8,Character Encoding,Google Cloud Datastore,Gson,摘要 我有一个无法解决的字符串编码和GAE问题。基本上,我有一个经典的编码问题,像ñ,é,ü这样的特殊字符��� 在数据存储查看器和客户端中,但仅在生产模式下 我通过两种机制将数据保存到数据存储: -用户输入:这在开发模式和生产模式下都非常有效 -第三方API:此API在开发模式下工作,但不在生产模式下工作 在数据之后 当我向第三方API请求数据时,响应头告诉我数据是UTF-8格式的。如果我看到响应内容,我可以很好地读取数据 内容类型:text/html;字符集=utf-8 该请求使用gson
- 当我向第三方API请求数据时,响应头告诉我数据是UTF-8格式的。如果我看到响应内容,我可以很好地读取数据 内容类型:text/html;字符集=utf-8
- 该请求使用gson处理并转换为java类。就我所见,没有办法为gson指定字符编码
- 然后我将数据带到数据存储,而不更改其编码(至少在我的应用程序点中)
- 问题的第一个迹象:如果我查看生产数据存储,编码已经丢失
- 在客户机(GWT)上,我接收同样以UTF-8编码的数据,但字符串已经存在�� 辛波尔斯
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>
顶级appengine-web.xml:
我不知道还能做些什么来修复它。有人能解决这个问题吗?很遗憾,由于这里没有答案,我认为没有办法将UTF-8设置为GAE生产JVM上的默认编码 在上面困扰我的案例中,我的问题是我正在使用默认编码读取第三方API请求,在生产GAE中是US-ASCII:
BufferedReader reader =
new BufferedReader(new InputStreamReader(url.openStream());
将上面的行更改为
BufferedReader reader =
new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8");
解决了这个问题。注意到它在开发模式下工作良好,而不是在生产模式下工作,这让人感到困惑。事实上,App Engine上的数据存储查看器显示的是特殊字符????没有正确编码的字符表明了这样一个事实:在这一过程中,字符编码丢失了。如果Web服务(即您从中检索它的外部API)已正确编码,并且您只需在数据存储中设置它,那么一切都应该正常工作。@Romin我想发生的事情是,我将Eclipse设置为使用UTF-8。这就是为什么它可以在开发模式下正常工作。但不知何故,GAE的JavaVM产品必须使用不同的编码。我需要找出如何改变这一点。。。