【问题标题】:Emoji characters destroys text in Google App Engine and Endpoints library (Engine in Python, endpoints library is on Android)表情符号字符会破坏 Google App Engine 和 Endpoints 库中的文本(Python 中的引擎,Android 上的端点库)
【发布时间】:2014-10-08 09:58:29
【问题描述】:

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

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

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

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

Android 应用中包含的库有:

  • google-api-client-1.19.0.jar
  • google-api-client-android-1.19.0.jar
  • google-http-client-1.19.0.jar
  • google-http-client-android-1.19.0.jar
  • google-http-client-gson-1.19.0.jar
  • google-http-client-jackson2-1.19.0.jar
  • google-http-client-jdo-1.19.0.jar
  • google-oauth-client-1.19.0.jar
  • gson-2.1.jar
  • jsr305-1.3.9.jar

【问题讨论】:

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


    【解决方案1】:

    我一直在研究类似的问题,我刚刚找到了解决方案。问题是 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 的问题...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-31
      • 2014-10-17
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多