App Engine是否在线处理字符编码与本地处理不同?

时间:2017-07-14 06:04:50

标签: mysql python-2.7 google-app-engine unicode flask

我写了一个小型的网络应用程序,它从一个简单的mysql数据库中提取数据并通过Python和Flask显示它。数据库中的文本字段编码为utf8_general_ci,有些包含特殊字符 - 例如,'Zürich'。

作为Flask / Jinja2 like to work on unicode,在查询之后,字符串将转换为unicode以传递到模板中。奇怪的是,我需要一种不同的方法来转换为unicode,具体取决于代码是在本地运行(Mac笔记本电脑)还是部署在GAE上。

这在本地运行时有效:

return [[unicode(c, encoding='utf-8') if isinstance(c, basestring) else c for c in b] for b in l]

在GAE上部署时可以使用:

return [[unicode(c, encoding='latin-1') if isinstance(c, basestring) else c for c in b] for b in l]

如果我在本地运行GAE版本,'Zürich'将显示为'Zürich'。反之亦然,我收到UnicodeDecode错误。

据我所知,这两个数据库是相同的 - 在线版本是本地版本的直接转储。

1 个答案:

答案 0 :(得分:0)

üü的Mojibake。

请参阅here中的“Mojibake”,了解可能的原因。

请参阅here以获取有关源代码中的操作的Python说明。我不知道Jinja的具体细节。