print
आईएनजी sys.stdout
(प्रक्रिया के मानक आउटपुट) एक सही .encoding
विशेषता है कि अजगर एक बाइट स्ट्रिंग में यूनिकोड स्ट्रिंग सांकेतिक शब्दों में बदलना करने के लिए आवश्यक मुद्रण प्रदर्शन करने के लिए उपयोग कर सकते हैं होने पर निर्भर करता है - और उस सेटिंग पर निर्भर करता है जिस तरह से ओएस स्थापित है, जहां मानक आउटपुट निर्देशित किया जाता है, और आगे।
यदि ऐसी कोई विशेषता नहीं है, तो डिफ़ॉल्ट कोडितका उपयोग किया जाता है, और जैसा कि आपने देखा है, यह अक्सर वांछित परिणाम प्रदान नहीं करता है ;-)।
आप यह देखने के लिए getattr(sys.stdout, 'encoding', None)
देख सकते हैं कि एन्कोडिंग है या नहीं (यदि यह है, तो आप केवल अपनी अंगुलियों को पार कर सकते हैं कि यह सही है ... या, शायद, सही सिस्टम पर अनुमान लगाने के लिए कुछ भारी प्लेटफ़ॉर्म-विशिष्ट चाल का प्रयास करें जांचने के लिए एन्कोडिंग ;-)। यदि यह सामान्य रूप से नहीं है, तो यह अनुमान लगाने के लिए कोई विश्वसनीय या क्रॉस-प्लेटफार्म तरीका नहीं है कि यह क्या हो सकता है। आप 'utf8'
को आजमा सकते हैं, सार्वभौमिक एन्कोडिंग जो कई मामलों में काम करता है (निश्चित रूप से ascii
से अधिक ;-) है, लेकिन यह वास्तव में रूले व्हील का एक स्पिन है।
अधिक विश्वसनीयता के लिए, आपके प्रोग्राम में यह कहने के लिए अपनी कॉन्फ़िगरेशन फ़ाइल होनी चाहिए कि आउटपुट एन्कोडिंग का उपयोग करने के लिए (शायद 'utf8'
के साथ डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से निर्दिष्ट नहीं किया गया हो)।
यह भी पोर्टेबिलिटी के लिए, अपने खुद के एन्कोडिंग, वह यह है कि नहीं
print someunicode
बल्कि
print someunicode.encode(thecodec)
और वास्तव में प्रदर्शन करने के लिए, से, अगर आप अधूरा उत्पादन होगा बेहतर है एक दुर्घटना की तुलना में,
print someunicode.encode(thecodec, 'ignore')
(जो बस एन को छोड़ देता है ऑन-encodable वर्ण), या, आम तौर पर बेहतर है,
print someunicode.encode(thecodec, 'replace')
(जो गैर encodable पात्रों के लिए प्रश्न चिह्न प्लेसहोल्डर का उपयोग करता है)।
क्या ओएस और पायथन संस्करण सर्वर चल रहे हैं? – Puddingfox
उबंटू 10.04 सर्वर दोनों – Soid
और पायथन 2.6.5 – Soid