【问题标题】:GAE unicode character gets encoded to utf-8 bytesGAE unicode 字符被编码为 utf-8 字节
【发布时间】:2015-08-03 22:10:09
【问题描述】:

在我的应用程序中,我接受来自用户输入的文本,用户经常在其中粘贴来自 microsoft word 的文本。

撇号 ' 就是一个很好的例子,当发布到我在谷歌应用引擎中的处理程序时,由于某种原因它被转换为 =E2=80=99。我尝试了许多令人困惑的方法来防止这种情况发生,我很乐意简单地删除这些字符,其中一些方法在普通 python 中有效,但在应用引擎中无效。

这是我尝试过的一些方法:

problem_string = re.sub(r'[^\x00-\x7F]+','', problem_string)# trying to remove it
problem_string = problem_string.encode( "utf-8" )# desperation...
problem_string = "".join((c if ord(c) < 128 else '' for c in problem_string))# trying to just remove the thing
problem_string = unicode(problem_string, "utf8")# probably fails since its already unicode

... 我试图捕获包含 ' 的字符串,然后将其作为 StringProperty() 保存到 ndb 数据存储区。除了最后一个选项,撇号示例被转换为 =E2=80=99

如果我可以保存撇号类型的字符并再次显示它,那就太好了,但简单地删除它也可以满足我的需求。

*编辑 - 如下:

experience = re.sub(r'[^\x00-\x7F]+',' ', experience)

似乎在开发服务器上工作正常,并成功删除了有问题的撇号。

还有一个问题可能是 POST 字段正在通过 blobstore,所以:blobstore_handlers.BlobstoreUploadHandler,我认为这可能会导致一些问题。

我真的一直在反对这一点,我真的真的感谢一些聪明的 stack-overflower 的解释......

【问题讨论】:

  • 你在哪里看到=E2=80=99?某些文件处理工具通常会向您显示非 ASCII 字节的 =NN 十六进制转义,在这种情况下无需担心。 0xE2、0x80、0x99 是 U+2018 左单引号 的正确 UTF-8 编码。最好让您的应用程序正确处理非 ASCII 字符,而不是尝试将它们过滤掉。
  • 我同意,我认为使用 blobstore 请求参数时会自动转义(或任何正确的术语),所以我没有阻止,而是使用了标准的 webapp2 请求处理程序来处理非-ASCII 字符适当。感谢您的答复。还有 =E2=80=99, 被立即转义,所以就在 self.request.get("the param")

标签: python google-app-engine unicode utf-8


【解决方案1】:

好的,我想我已经模糊地发现了一个解决方案。

它与 blobstore 上传处理程序有关,我猜它正在适当地编码/解码 unicode 以解决奇怪的文件字符。所以我修改了处理程序,以便通过谷歌云存储而不是 blobstore 上传图像文件,它似乎工作正常,即 '' 的形式进入数据存储区而不是 =E2=80=99

接下来几天我不会接受我自己的答案,也许有人可以为未来困惑的人更好地澄清事情。

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2015-10-08
    • 2011-08-09
    相关资源
    最近更新 更多