में मैं एक आवेदन है कि लौटने के लिए उत्सुक लगता है के खिलाफ काम कर रहा हूँ, कि मैं क्या, डबल UTF-8 एन्कोडेड तार होने के लिए विश्वास करते हैं।डबल-डिकोडिंग यूनिकोड अजगर
मैं यूटीएफ -8 का उपयोग करके एन्कोडेड स्ट्रिंग u'XüYß'
भेजता हूं, इस प्रकार X\u00fcY\u00df
(X\xc3\xbcY\xc3\x9f
के बराबर) बनता है।
सर्वर चाहिए बस गूंज मैं इसे क्या भेजा है, अभी तक रिटर्न निम्नलिखित: X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f
(X\xc3\xbcY\xc3\x9f
होना चाहिए)। अगर मैं का उपयोग कर इसे डिकोड str.decode('utf-8')
u'X\xc3\xbcY\xc3\x9f'
जो, एक ... यूनिकोड स्ट्रिंग की तरह दिखता है UTF-8 का उपयोग कर इनकोडिंग मूल स्ट्रिंग वाली हो जाता है,।
लेकिन अजगर मुझे यह पहली बार फिर से एन्कोडिंग के बिना एक यूनिकोड स्ट्रिंग डिकोड नहीं दूँगी - जो किसी कारण से विफल रहता है, कि मुझे निकल जाता है:
>>> ret = 'X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f'.decode('utf-8')
>>> ret
u'X\xc3\xbcY\xc3\x9f'
>>> ret.decode('utf-8')
# Throws UnicodeEncodeError: 'ascii' codec can't encode ...
मैं अजगर कैसे राजी करते स्ट्रिंग फिर से डिकोड करने के लिए ? - और/या क्या यह वास्तव में स्ट्रिंग्स में वास्तव में क्या है, इसे डिबग करने का कोई (व्यावहारिक) तरीका है, हालांकि सभी अंतर्निहित रूपांतरण print
उपयोग करता है?
(और हाँ, मैं सर्वर साइड के डेवलपर्स के साथ इस व्यवहार सूचना दी है।)
** Whew ** - मेरी डरावनी चीज़ का उपयोग करने की आवश्यकता नहीं है। –