Redis
 sql >> डेटाबेस >  >> NoSQL >> 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 . के साथ प्रतिक्रिया डिकोडिंग सक्षम करते हैं फिर क्लाइंट कनेक्शन के एन्कोडिंग का उपयोग करके प्रतिक्रियाओं को यूनिकोड में परिवर्तित कर दिया जाएगा। इसका सीधा सा मतलब है कि आपको लौटाए गए डेटा को स्पष्ट रूप से डीकोड करने की आवश्यकता नहीं है, redis यह आपके लिए करेगा और आपको एक यूनिकोड स्ट्रिंग वापस देगा:

>>> 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'])

तो, आपके दूसरे उदाहरण में जहां आप रेडिस से फ़ाइल में पुनर्प्राप्त डेटा लिखते हैं, यदि आप प्रतिक्रिया डिकोडिंग सक्षम करते हैं तो आपको वांछित एन्कोडिंग के साथ आउटपुट फ़ाइल खोलने की आवश्यकता होती है। यदि यह डिफ़ॉल्ट एन्कोडिंग है तो आप केवल 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. स्कैला से उपयोग के लिए रेडिस क्लाइंट लाइब्रेरी की सिफारिशें

  2. NestJS socket.io-redis:6.0.1

  3. मुझे कितनी बार अपना Booksleeve कनेक्शन खोलना/बंद करना चाहिए?

  4. रेडिस में AOF और RDB बैकअप

  5. Django चैनल में समूहों को संदेश भेजना 2