Redis
 sql >> база данни >  >> NoSQL >> Redis

Инкапсулиране на Unicode от redis

Не съм сигурен, че има проблем.

Ако премахнете всички .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 тогава отговорите ще бъдат преобразувани в unicode, използвайки кодирането на клиентската връзка. Това просто означава, че не е необходимо изрично да декодирате върнатите данни, 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 във файл, ако активирате декодиране на отговор, тогава трябва да отворите изходния файл с желаното кодиране. Ако това е кодирането по подразбиране, тогава можете просто да използвате 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.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Конфигурация на Laravel Redis

  2. Изпразване/изтриване на набор в Redis?

  3. Въведение в Redis структури от данни:хешове

  4. Разлика между StackExchange.Redis и ServiceStack.Redis

  5. Redis свързва ECONNREFUSED в NodeJS в клъстер Kubernetes