sql >> データベース >  >> NoSQL >> Redis

RedisからのUnicodeのカプセル化

    問題があるかどうかわかりません。

    すべての.encode('utf8')を削除した場合 コードを呼び出すと、正しいファイルが生成されます。つまり、ファイルは現在のコードで生成されたものと同じです。

    >>> r_server = redis.Redis('localhost')
    >>> r_server.keys()
    []
    >>> r_server.sadd(u'Hauptstädte', u'東京', u'Godthåb',u'Москва')
    3
    >>> r_server.keys()
    ['Hauptst\xc3\xa4dte']
    >>> r_server.smembers(u'Hauptstädte')
    set(['Godth\xc3\xa5b', '\xd0\x9c\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0', '\xe6\x9d\xb1\xe4\xba\xac'])
    

    これは、キーと値がUTF8でエンコードされていることを示しているため、.encode('utf8') 必須ではありません。 redisのデフォルトのエンコーディング モジュールはUTF8です。これは、クライアントの作成時にエンコーディングを渡すことで変更できます。 redis.Redis('localhost', encoding='iso-8859-1') 、しかし理由はありません。

    decode_responses=Trueを使用して応答のデコードを有効にした場合 次に、応答はクライアント接続のエンコーディングを使用してユニコードに変換されます。これは、返されたデータを明示的にデコードする必要がないことを意味します。redis それを行い、Unicode文字列を返します:

    >>> r_server = redis.Redis('localhost', decode_responses=True)
    >>> r_server.keys()
    [u'Hauptst\xe4dte']
    >>> r_server.smembers(u'Hauptstädte')
    set([u'Godth\xe5b', u'\u041c\u043e\u0441\u043a\u0432\u0430', u'\u6771\u4eac'])
    

    したがって、redisから取得したデータをファイルに書き込む2番目の例では、応答のデコードを有効にする場合は、目的のエンコードで出力ファイルを開く必要があります。これがデフォルトのエンコーディングである場合は、open()を使用できます。 。それ以外の場合は、codecs.open()を使用できます または、ファイルに書き込む前にデータを手動でエンコードします。

    import codecs
    
    cities_tag = u'Hauptstädte'
    with codecs.open('capitals.txt', 'w', encoding='utf8') as f:
        while r_server.scard(cities_tag) != 0:
            city = r_server.srandmember(cities_tag)
            f.write(city + '\n')
            r_server.srem(cities_tag, city)
    



    1. メモリが不足した場合、Redisは何をしますか?

    2. MongoDB:スキーマを定義する方法は?

    3. mongo Shellでのクエリにより、SyntaxErrorが発生します:missing:after property

    4. PythonDockerコンテナを取得してRedisDockerコンテナと対話する