处理在python,tornado和redis上运行的网站中的外来字符

时间:2011-06-29 01:53:18

标签: python redis tornado hebrew

我已经阅读了许多相关问题,并且对如何处理这种情况有点不确定。

基本问题:在网站上处理“外国”(希伯来语,希腊语,阿拉姆语等)字符的最佳方法是什么?

我知道我需要使用UTF-8编码,但它背后的机制会丢失。

我使用龙卷风作为我的框架并将数据存储在redis中。

我目前的实现是简单地将英文键盘等效存储在数据存储中,然后使用适当的希伯来语/希腊字体(例如Bwhebb.ttf)在页面上呈现。在大多数情况下,这已经奏效了,但是我遇到了一些CGI编码的字符,这反过来会导致字体方法中断。

2 个答案:

答案 0 :(得分:7)

您应该以unicode格式保存文本。

import redis
r = redis.Redis(host='localhost', port=6379, db=0)

greek = u'αβγδ'
greek, type(greek)
# (u'\u03b1\u03b2\u03b3\u03b4', <type 'unicode'>)

r.set(u"greek", greek)
# True

虽然当你检索它时,Redis很可能会给你一个字节串,这不是你想要的:

greek2 = r.get(u"greek")
greek2, type(greek2)
# ('\xce\xb1\xce\xb2\xce\xb3\xce\xb4', <type 'str'>)

您希望将其转换为unicode,如下所示:

greek2 = unicode(r.get(u"greek"), "utf-8")
greek2, type(greek2)
# (u'\u03b1\u03b2\u03b3\u03b4', <type 'unicode'>)

答案 1 :(得分:3)

阅读评论中给出的文章。

简短的回答,在Redis中存储unicode,如果你使用的是Python 2.x,请在整个过程中使用unicode字符串(u"")。从Redis中检索后,您可能需要转换为unicode(unicode()),具体取决于它为您提供的内容。