2011-06-29 22 views
1

我已經閱讀了很多相關的問題,並且對於如何處理這種情況有點不確定。在python,龍捲風和redis上運行的網站上處理外來字符

基本問題:在網站中處理「外國人」(希伯來語,希臘語,阿拉米語?等)字符的最佳方法是什麼?

我知道我需要使用UTF-8編碼,但它背後的機制卻在我身上丟失了。

我使用龍捲風作爲我的框架,並將數據存儲在redis中。

我目前的實現是簡單地將英文鍵盤等價物存儲在數據存儲中,然後用適當的希伯來語/希臘字體(例如Bwhebb.ttf)在頁面上呈現。這在大多數情況下都有效,但是我正在碰撞一些正在進行CGI編碼的字符,這反過來導致字體方法被破壞。

+2

http://farmdev.com/talks/unicode/ –

+0

http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html - 這篇文章的標題是「絕對最低限度的每個軟件開發人員,絕對肯定,肯定必須知道的關於Unicode和字符集「 - 請去閱讀它(沒有藉口!):它是寫得很好,我相信這將是有益的給你。 –

+0

另一個良好的閱讀,專門針對蟒蛇3是http://diveintopython3.org/strings.html(上joelonsoftware文章是一個很好的閱讀,但你可以看到它已經差不多10年前寫的) – mac

回答

3

閱讀評論中給出的文章。

雖然只是簡單回答,但在Redis中存儲unicode,如果您使用的是Python 2.x,則始終使用unicode字符串(u"")。您可能需要檢索後轉換爲Unicode(unicode())從Redis的,這取決於它給你。

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

謝謝,伊恩。 PS。當時如果寫你的代表是1337。 – jmoz