पर पाइथन 2.7 में एक पिवोटल ट्रैकर एपीआई मॉड्यूल लागू किया है, तो मैंस्पेलप्लिब का उपयोग करके गैर-ASCII वर्णों को कैसे पोस्ट करूं? Pivotal Tracker API पोस्ट डेटा को XML प्रकार और "एप्लिकेशन/एक्सएमएल" सामग्री प्रकार होने की अपेक्षा करता है।जब मैं सामग्री-प्रकार "एप्लिकेशन/एक्सएमएल"
मेरे कोड का उपयोग करता urlib/httplib दस्तावेज़ पोस्ट करने के लिए दिखाया गया है:
request = urllib2.Request(self.url, xml_request.toxml('utf-8') if xml_request else None, self.headers)
obj = parse_xml(self.opener.open(request))
यह एक अपवाद पैदावार जब एक्सएमएल पाठ गैर- ASCII वर्ण हैं:
File "/usr/lib/python2.7/httplib.py", line 951, in endheaders
self._send_output(message_body)
File "/usr/lib/python2.7/httplib.py", line 809, in _send_output
msg += message_body
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 89: ordinal not in range(128)
के रूप में पास के रूप में मैं कर सकते हैं देखें, httplib._send_output संदेश पेलोड के लिए एक ASCII स्ट्रिंग बना रहा है, संभवतः क्योंकि यह डेटा को यूआरएल एन्कोडेड (एप्लिकेशन/एक्स-www-form-urlencoded) होने की अपेक्षा करता है। जब तक केवल ASCII वर्णों का उपयोग नहीं किया जाता है तब तक यह एप्लिकेशन/एक्सएमएल के साथ ठीक काम करता है।
क्या गैर-ASCII वर्ण वाले एप्लिकेशन/एक्सएमएल डेटा पोस्ट करने का एक सीधा तरीका है या क्या मुझे हुप्स के माध्यम से कूदना होगा (उदाहरण के लिए ट्विस्टड और पोस्ट पेलोड के लिए कस्टम निर्माता) का उपयोग करना होगा?
शायद आप हेडर के 'सामग्री-प्रकार' को बदल सकते हैं, लेकिन यह समस्या को कैसे ठीक करता है? 'Msg' पाइथन पुस्तकालयों में बनाया गया है, और बाइट स्ट्रिंग है। – jro
@jro: इसका HTTP के साथ कुछ लेना देना नहीं है। ऊपर * पूर्ण * उदाहरण देखें। – jfs
मुझे लगता है कि यह समस्या का कारण बनता है, लेकिन मेरा मुद्दा यह था कि उसके पास 'msg' चर पर कोई नियंत्रण नहीं है। मैं आपके बिंदु से सहमत हूं, लेकिन मेरा प्रश्न यह है कि इस तथ्य को और कैसे हल किया जा सकता है जब यह तथ्य उसे हल करने में मदद कर सकता है जब libs 'msg' में' msg = "\ r \ n" .join (self._buffer) के रूप में बनाया गया है। '? – jro