2012-01-22 31 views
4

我無法設置和檢索我的redis數據庫中的重音字符串。
帶有重音符號的字符被編碼,我怎樣才能找回他們,因爲他們在哪裏設置?如何在redis中保存並檢索帶有重音符號的字符串?

redis> set test téléphone 
OK 
redis> get test 
"t\xc3\xa9l\xc3\xa9phone" 

我知道這已經被問 (http://stackoverflow.com/questions/6731450/redis-problem-with-accents-utf-8-encoding),但沒有詳細的解答。

回答

19

Redis服務器本身將所有數據存儲爲二進制對象,因此它不依賴於編碼。服務器將只存儲客戶端發送的內容(包括UTF-8字符)。

這裏有幾個實驗:

$ echo téléphone | hexdump -C 
00000000 74 c3 a9 6c c3 a9 70 68 6f 6e 65 0a    |t..l..phone.| 

c3a9是的 'E' 字符表示。

$ redis-cli 
> set t téléphone 
OK 
> get t 
"t\xc3\xa9l\xc3\xa9phone" 

實際上,數據正確存儲在Redis服務器中。但是,當它在終端中啓動時,Redis客戶端將解釋輸出並應用sdscatrepr function來轉換非打印字符(其定義依賴於語言環境,無論如何可能會被分解爲多字節字符)。

簡單的解決方法是啓動Redis的-CLI與「原始」選項:

$ redis-cli --raw 
> get t 
téléphone 

自己的應用程序可能會使用客戶端庫,而不是Redis的-CLI之一,所以它不應該是一個問題在實踐中。

+0

非常感謝,你的解釋讓事情變得更加清晰。你是對的我正在使用node-redis(node.js模塊)來查詢數據庫。我將檢查node-redis如何使用「raw」選項。 – Luc

+0

很好的解釋!謝謝@Didier! –

相關問題