【发布时间】: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