【发布时间】:2011-03-09 21:14:24
【问题描述】:
我正在构建一个 gwt 应用程序,它将随机网页的文本存储在数据存储文本字段中。文本通常采用 UTF-8 格式。我的应用程序的所有文件都存储为 UTF-8,当我在本地计算机上运行应用程序时,整个过程都可以正常工作。 UTF-8 文本以 UTF-8 格式存储,并可从应用引擎的本地版本中检索。但是,当我在存储文本和检索文本之间的某个位置将应用程序部署到谷歌应用程序引擎时,它不再是 UTF-8,这会导致非 ascii 字符显示为?。
当我在 appengine 控制面板中查看数据存储时,所有特殊字符都显示为 ?这让我相信这是写入数据库时出现的问题。
有谁知道如何解决这个问题?
应用程序本身有点大。 这是一些伪代码:
Text webPageText = new Text(<STRING THAT CONTAINS UNICODE CHARACTERS>);
/*Some Code to store Text object on datastore
Specifically I'm using javax.jdo.PersistenceManager to do this.
Some Code to retrieve text from datastore. */
String retrievedText = webPageText.getValue();
问题是retrieveText 回来了?而不是 unicode 字符。
我在 python 中发现了一个类似的问题:Trying to store Utf-8 data in datastore getting UnicodeEncodeError。虽然我的应用程序没有出现任何错误。
不幸的是,我认为 Java 字符串是默认的 utf-8,我找不到任何可以让我将它们明确声明为 utf-8 的代码。
编辑:我现在构建了一个小型 web 应用程序,它接收 unicode 文本并将其存储在数据存储中,然后毫无问题地检索它。我仍然不知道问题出在我的原始源代码中,但我将更改我的代码处理网页检索的方式,以匹配我刚刚构建的较小的应用程序。谢谢大家的帮助。
【问题讨论】:
-
你能贴出相关的代码吗?
-
您说您认为问题出在存储和检索上,那么请不要包含您用于存储和检索数据的代码!如果我们要提供帮助,我们需要相关代码。
-
整个项目的源码现在贴在上面。几个小时后,我将尝试制作一个重现问题的小版本。
-
@RichardWallis 请问您找到解决方案了吗?从您遇到此问题 2 年后,仍然有人遇到此问题。
标签: google-app-engine utf-8 google-cloud-datastore