Redisの中国語の入庫に成功して、データを読み取ってファイルの文字化けして問題を書きます
1575 ワード
近いうちにredisを使う必要があるが,符号化という問題では,非常に長い間悩んでいた.需要:毎日1つのプロセスは中国語ファイルをredisに入庫し(不定時更新)、他のいくつかのプロセスはredisの情報を読み取り、データ結果を処理します.使用するredisモジュール:入庫が正常で、データの読み取りに成功し、GBKコードでファイルに書き込み異常が発生した.次のパラメータでredisを接続します:client=redis.StrictRedis(host='localhost',port=6379,db=0,password="***)stackoverflowから、unicodeではなくstrタイプのvalueをredisに転送したほうがいいことがわかります.そうしないと、redisはsetコマンドを直接使用して、valueをutf-8のフォーマットに設定します.getメソッドを使用してデータを取得する場合、redis自体はvalueのデータのタイプに関心を持っていません.strタイプのvalueを返します.したがって、valueのタイプが格納されるときに重要です.プライマリは現在redis-pyのソースコードにあります.
解決策:redis APIを使用してデータベースに接続する場合:
上記パラメータを設定することで,符号化問題を克服した.
誰かがもっと良い解釈と解決方法を持っていると仮定して、分かち合いを求めます!
"""
Encode the value so that it's identical to what we'll
read off the connection
"""
if self.decode_responses and isinstance(value, bytes):
value = value.decode(self.encoding, self.encoding_errors)
elif not self.decode_responses and isinstance(value, unicode):
value = value.encode(self.encoding, self.encoding_errors)
return value
解決策:redis APIを使用してデータベースに接続する場合:
class redis.StrictRedis(host='localhost', port=6379, db=0, password=None, socket_timeout=None,connection_pool=None, charset='GBK', errors='strict',
decode_responses=True, unix_socket_path=None)
上記パラメータを設定することで,符号化問題を克服した.
誰かがもっと良い解釈と解決方法を持っていると仮定して、分かち合いを求めます!