標籤:緩衝 python mysql redis 亂碼
描述:一個web服務,原先的商務邏輯是把mysql查詢的結果緩衝在redis中一個小時,加快請求的響應。現在有個問題就是根據請求的指定的編碼返回對應編碼的response。
首先是要修改響應的body的編碼,由於mysql去出來就是unicode,所以直接使用```content = content.encode(charset)
```來轉化,然後在請求header中也加入字元編碼。
解決:可是這樣測試下來,有的請求可以返回正確的編碼格式,有的還是亂碼,最後猜測是redis中資料類型的問題
#redis 中取出的快取資料type(content)<type 'str'>import chardetchardet.detect(content){'confidence': 0.99, 'encoding': 'utf-8'} #編碼還是utf-8#msyql取出的欄位資料type(content)<type 'unicode'>
一種方式是在redis中就儲存unicode編碼,緩衝的時候還是unicode,為啥到redis裡面再取出來就是str了呢? 可能還需特殊處理吧。一種方式是對content判斷類型,分別處理。
最後的解決片段:
if isinstance(content, unicode): content = content.encode(charset)elif isinstance(content, str): content = content.decode("utf-8").encode(charset)
參考: http://www.pythonclub.org/python-basic/codec
本文出自 “orangleliu筆記本” 部落格,轉載請務必保留此出處http://blog.csdn.net/orangleliu/article/details/41445947
作者orangleliu 採用署名-非商業性使用-相同方式共用協議
[python]mysql資料緩衝到redis中 取出時候編碼問題