【问题标题】:Cannot store Greek in datastore无法在数据存储中存储希腊语
【发布时间】:2013-06-01 11:00:13
【问题描述】:

我的 Google App Engine 应用存在严重问题。到目前为止,我存储在数据库中的所有内容都是英文的。现在我必须用希腊语存储一些东西,当我稍后尝试从数据库中检索它时,我有一个 u'\u039a\u03b1\u03b9\u03c1\u03cc\u03c2' 而不是字符串。

直到现在,当我想在 html 上放一些东西时,我使用了以下一个

error = unicode(error,"utf-8")

但我在将其存储到数据之前尝试将其正确放置,但无济于事

编辑:

我只是看到了一些让我更困惑的东西。我从 html 表单中获取这些字符串。我有很多输入希腊语效果很好。但是那些造成问题的人在"select" 标签上,我在其中获得了所有选择的列表。其他输入以希腊语存储在数据库中,没有任何问题。

编辑 2:

我想从 cmets 编辑一些东西。我犯了一个错误。如果我打印变量,我可以毫无问题地看到字符串。但是如果我self.response.out.write(thestring),我看到%CE%9A%CE%BF%CE%B9%CE%BD%CF%89%CE%BD%CE%B9%CE%BA%CE%AC

【问题讨论】:

  • 您使用的是哪个版本的 Python? Python 3.x 处理 unicode 与 2.x 不同。
  • 另外,我很确定 Python 的 repl 在漂亮打印时不会解码 unicode(u"..." 表单)。当你print它时它是否有效?如果没有,您必须设置输出文件的编码(例如,sys.stdout)。
  • 我有 python 2.7。另外,如果我尝试打印它,它看起来像这样 %CE%9A%CE%BF%CE%B9%CE%BD%CF%89%CE%BD%CE%B9%CE%BA%CE%AC跨度>
  • 对GAE没有太多经验,但是我在MySQL中存储Unicode文本时遇到了同样的问题,通过将连接字符串中的“characterEncoding”和“characterSetResult”设置为“utf8”来解决两者,并将“useUnicode”设置为“true”。可能根本不是你的问题,但我扯了 2 周的头发,以为这是来自另一个系统的编码问题,只是找到了一个更简单的解决方法。
  • 好的。问题是您需要执行以下一项或两项操作:a)解码字符串,或b)设置文件句柄的输出编码。然而,这些天我不记得太多 Python 了!祝你好运。

标签: python google-app-engine python-2.7 jinja2


【解决方案1】:

我可以在谷歌应用引擎中存储和检索希腊语,但在我这样做之前它也对我不起作用:

name = unicode(form.name.data, "utf8")

我可以在谷歌应用引擎中存储希腊语,所以为什么不像我一样做。说起来容易做起来难,但是在任何地方都使用 utf-8,然后它就会起作用。您将需要这样的网页代码:

<html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

您还可能需要指示您的输入表单将其编码为 utf-8,但我不使用 appengine 执行此操作,但我仍然可以存储希腊语。我只是通过实验发现的,如果你想要这个理论,你可以阅读these slides

【讨论】:

  • 我也可以用希腊语存储,但只能进行简单的输入。如果我从“选择”html标签中检索数据,这些数据会像我在第一篇文章中所说的那样存储。
猜你喜欢
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2011-08-13
  • 2017-12-04
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多