2016-10-08 1 views
0

私はドッカーの作成を使用して簡単なredisとフラスコプロジェクトに取り組んでいます。私のフラスコはlpush、rpopを使ってredisリスト構造を作ります。私が今すべての結果をb'value 'にしたbrpopのようなコマンドで遊ぶまではうまくいった。私は最初のコマンドだけで作業しようとしましたが、何とかb'valueの出力が引き続き出てきます。これを引き起こした原因は何ですか?Python redis rpopは結果b'valueのリスト構造

**redis.lpush('moviestore','likemov') 

itle = redis.rpop('moviestore')** 
+0

Python 2の場合は、バイト文字列の値をプッシュしているので正常です。 Unicode文字列が必要な場合は、文字列の先頭にuを付けます(例:u "moviestore")。 –

+0

@LaurentLAPORTEチップをありがとう。私は私のプロジェクトをPython 2に変更しました。しかし、まだ私はb ''なしで私の値を得るために、Python 3で何をしなければならないのですか? – Ftalem

答えて

1

Redisの文字列は、Pythonあるようだ(Data Typesについてのドキュメントを参照してください)文字列をバイト。

だから、私は、UnicodeからPython 3のBytes(そしておそらくはPython 2)への自動変換があると思います。 Unicode文字列で動作するように

、あなたが(例えばUTF8エンコーディングを使用して)/デコード刺さをエンコードすることができます。要するに

redis.lpush('moviestore', u'likemov'.encode('utf8')) 
... 
itle = redis.rpop('moviestore').decode('utf8') 

  • Redisの中でUnicode文字列を格納するために:あなたはそれをエンコード
  • RedisからUnicode文字列を取得するには、それをデコードします。

お知らせ違い:Pythonの3のPythonの2バイト文字列とUnicode文字列であるstr

  • u'valueは」

    • デフォルトでは、 'の値を' ですされますUnicode文字列:py2 unicode/py3 str;
    • b'value 'はバイト文字列です:py2 str/py3 bytes
  • 関連する問題