अजगर डिकोडिंग यूनिकोड समर्थित नहीं है


81

मुझे पायथन में अपने एन्कोडिंग के साथ समस्या हो रही है। मैंने विभिन्न तरीकों की कोशिश की है, लेकिन मैं अपने आउटपुट को UTF-8 में एन्कोड करने का सबसे अच्छा तरीका नहीं ढूंढ सकता।

यही मैं करने की कोशिश कर रहा हूँ:

result = unicode(google.searchGoogle(param), "utf-8").encode("utf-8")

searchGoogleके लिए पहला Google परिणाम देता है param

यह मुझे मिलने वाली त्रुटि है:

exceptions.TypeError: decoding Unicode is not supported

क्या किसी को पता है कि इस त्रुटि से बचने के लिए मैं UTF-8 में पायथन को अपना आउटपुट कैसे दे सकता हूं?

जवाबों:


102

लगता है google.searchGoogle(param)पहले से ही रिटर्न unicode:

>>> unicode(u'foo', 'utf-8')

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    unicode(u'foo', 'utf-8')
TypeError: decoding Unicode is not supported

तो आप क्या चाहते हैं:

result = google.searchGoogle(param).encode("utf-8")

एक साइड नोट के रूप में, आपका कोड यह अपेक्षा करता है कि utf-8एन्कोडेड स्ट्रिंग को वापस लौटाया जाए इसलिए इसे डिकोड करने (उपयोग करने unicode()) और .encode()उसी एन्कोडिंग का उपयोग करके वापस एन्कोडिंग में क्या बिंदु था ?


4
ईमानदारी से, यह unicode()समझने की कोशिश कर रहा था कि क्या हो रहा है। बहुत बहुत धन्यवाद :-)
simonbs

2
अब मुझे कभी-कभी मिलेगा ascii' codec can't decode byte 0xc3 in position। क्या आप जानते हैं कि ऐसा क्यों है?
सिमोन

2
लाइन में मैंने सुझाव दिया? तब इसका मतलब होगा कि searchGoogle () 0xC3 बाइट के साथ एक स्ट्रिंग लौटाता है। .encode()पायथन में उस परिणाम पर कॉल करके पहले यूनिकोड में बदलने की कोशिश की जा रही है (एससीआई एन्कोडिंग का उपयोग करके)। मुझे नहीं पता कि क्यों खोजगूगल () कभी-कभी यूनिकोड और कभी-कभी एक स्ट्रिंग लौटाएगा। शायद यह इस पर निर्भर करता है कि आप इसे क्या देते हैं param? एक प्रकार से चिपके रहने की कोशिश करें।
याक

66
काश, यूनिकोड के लिए एक सुरक्षित, सरल तरीका होता।
एरिक वॉकर

@EricWalker आप एक अजीब सहायक कार्य लिख सकते हैं जैसे def uors2u(object, encoding=..., errors=...)कि objectयदि यह पहले से ही यूनिकोड में है तो अपरिवर्तित वापस आ जाएगा या अगर यह परिवर्तित हो जाता है। हालाँकि, इस कोड से बदबू आती है। जैसे ही आप इसे बाहर से प्राप्त करते हैं (फाइल सिस्टम की तरह) और इसे वापस भेजने से पहले जरूरत पड़ने पर इसे परिवर्तित करने के लिए आपको सभी इनपुट को यूनिकोड में परिवर्तित करना चाहिए। केवल एक ही स्थान होना चाहिए जहां आप यूनिकोड में परिवर्तित होते हैं, इसलिए मेरे द्वारा वर्णित एक सहायक कार्य की आवश्यकता नहीं होनी चाहिए।
लियोनिद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.