在使用Python、Tornado和Redis的网站中处理外语字符

1 投票
2 回答
962 浏览
提问于 2025-04-16 20:29

我看过很多相关的问题,但对如何处理这种情况有点不确定。

基本问题是:在网站上处理“外文”(比如希伯来文、希腊文、阿拉米文等)字符的最佳方法是什么?

我明白需要使用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给你的是什么。

撰写回答