表情符号字符会破坏Google App Engine和Endpoints库中的文本(Python中的引擎,Android上的端点库)

时间:2014-08-14 16:43:03

标签: android python google-app-engine google-cloud-endpoints google-cloud-sql

当发送到Google App Engine的文本中包含表情符号字符时,它们将被销毁。表情符号之后的任何文本也是如此。所以任何表情符号都会破坏任何后续文本!

App Engine是用Python实现的,终端客户端库是为Android生成的,文本是用Cloud SQL保存的。

有没有人知道这个问题或有解决方案吗?

我已将我的应用引擎更新为最新的1.9.9。

Android应用中包含的库是:

  • 谷歌-API的客户端 - 1.19.0.jar
  • 谷歌-API的客户端 - 机器人-1.19.0.jar
  • 谷歌-HTTP-客户1.19.0.jar
  • 谷歌-HTTP-客户机器人-1.19.0.jar
  • 谷歌-HTTP-客户GSON-1.19.0.jar
  • 谷歌-HTTP-客户jackson2-1.19.0.jar
  • 谷歌-HTTP-客户JDO-1.19.0.jar
  • 谷歌OAuth的客户端 - 1.19.0.jar
  • GSON-2.1.jar
  • jsr305-1.3.9.jar

1 个答案:

答案 0 :(得分:0)

我一直在研究类似的问题,我刚刚找到了解决方案。问题是App Engine使用“US-ASCII”作为默认字符集,而不是更有用的“UTF-8”。

以下是有关此问题的一些相关资源:

Is there a way to use UTF-8 with app engine?

https://code.google.com/p/googleappengine/issues/detail?id=2219

但对我来说,我无法通过任何App Engine配置设置覆盖JVM的默认字符集。因此,对我来说唯一的解决方案就是在您从端点读取(或写入)数据时明确说明字符集。

如果您正在使用InputStreamReader,则可以执行以下操作:

new InputStreamReader(mInputStream, "UTF-8")

或者,您可以将数据作为字节读取,然后从字节中创建一个字符串:

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = mInputStream.read(data, 0, data.length)) != -1) {
    buffer.write(data, 0, nRead);
}
buffer.flush();
String response = new String(buffer.toByteArray(), "UTF-8");

希望这有帮助!我不敢相信这是自2009年以来一直是App Engine的问题......