在使用Python、Tornado和Redis的网站中处理外语字符
我看过很多相关的问题,但对如何处理这种情况有点不确定。
基本问题是:在网站上处理“外文”(比如希伯来文、希腊文、阿拉米文等)字符的最佳方法是什么?
我明白需要使用UTF-8编码,但具体怎么操作我就搞不清楚了。
我正在使用tornado作为框架,并把数据存储在redis里。
我现在的做法是把英文键盘上对应的字符存储在数据里,然后在页面上用合适的希伯来文或希腊文字体(比如Bwhebb.ttf)来显示。这种方法大部分时间都能用,但我遇到了一些字符被CGI编码了,这导致字体显示的方法出现了问题。
2 个回答
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'>)
3
看看评论里提到的文章。
简单来说,就是在Redis里存储unicode字符。如果你用的是Python 2.x版本,记得在整个过程中都使用unicode字符串(u""
)。从Redis取出数据后,你可能需要用unicode()
把它转换成unicode格式,这取决于Redis给你的是什么。