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

swa*_*eck 1 python tornado hebrew redis

我已经阅读了很多相关问题,对于如何处理这种情况我有点不确定.

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

我知道我需要使用UTF-8编码,但它背后的机制在我身上丢失了.

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

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

Ian*_*non 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
Run Code Online (Sandbox Code Playgroud)

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

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

你想将它转换为unicode,如下所示:

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