我写了一个小型的网络应用程序,它从一个简单的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错误。
据我所知,这两个数据库是相同的 - 在线版本是本地版本的直接转储。