2014-09-09 8 views
22

Mi trovo nei guai .Il mio codice qui sotto.Ma non so perché c'è un carattere "b" prima della stringa di output "Hello Python".Informazioni sul prefisso char b in Python3.4.1 client connect to redis

>>> import redis 
>>> redisClient = redis.StrictRedis(host='192.168.3.88',port=6379) 
>>> redisClient.set('test_redis', 'Hello Python') 
True 
>>> value = redisClient.get('test_redis') 
>>> print(value) 
b'Hello Python' //why char 'b' output? 

risposta

23

b'Hello Python' è una stringa di byte - Redis si auto-codificare una stringa unicode per voi per il modo in, ma è il vostro lavoro per decodificarlo sulla via d'uscita.

Meglio per codificare e decodificare in modo esplicito:

>>> redisClient.set('test_redis', 'Hello Python'.encode('utf-8')) 
>>> redisClient.get('test_redis').decode('utf-8') 
'Hello Python' 
+0

Grazie mille! –

+0

Grazie mille per questo ... ma sembra logicamente corretto che si codificherà automaticamente a proprio piacimento e decodificherà solo se lo dirai a ... Voglio dire, non sembra più un modo auto-distorto di ottenere cose fatte –

+0

@ sidd.rc: una delle idee chiave in python 3 è che la codifica/decodifica non è mai automatica. la codifica automatica qui è pessima, perché non puoi decodificarla a meno che tu non sappia quale codifica è stata usata. – Eric

43

Vuol dire che è una stringa di byte

È possibile utilizzare:

redis.StrictRedis(host="localhost", port=6379, charset="utf-8", decode_responses=True) 

utilizzando decode_responses=True per fare una stringa unicode.

+4

Nota che questo impedisce di memorizzare dati binari veri nel tuo database, poiché verranno trattati erroneamente come stringhe con codifica UTF8 – Eric

+1

@Eric Hai ragione, grazie. – mickeyandkaka

+2

Dispari come 'decode_responses' non viene descritto in [docs] (http://redis-py.readthedocs.org/en/latest/#redis.StrictRedis) – Eric