जब फ़ाइल को रीडायरेक्ट किया जा रहा है, तो यूनिकोडडॉफॉरस


100

मैं इस स्निपेट को दो बार चलाता हूं, उबंटू टर्मिनल में (यूएफ -8 को एन्कोडिंग सेट), एक बार ./test.pyऔर उसके साथ ./test.py >out.txt:

uni = u"\u001A\u0BC3\u1451\U0001D10C"
print uni

पुनर्निर्देशन के बिना यह कचरा प्रिंट करता है। पुनर्निर्देशन के साथ मुझे एक यूनिकोडडबलप्रोग्राम मिलता है। क्या कोई समझा सकता है कि मुझे केवल दूसरे मामले में त्रुटि क्यों मिली, या इससे भी बेहतर विवरण दिया गया कि दोनों मामलों में पर्दे के पीछे क्या चल रहा है?


यह उत्तर मदद का भी हो सकता है।
tzot

जब मैं आपकी खोज को दोहराने की कोशिश करता हूं, तो मुझे एक यूनिकोडएकोडकोड प्राप्त होता है, न कि यूनिकोडडबलक्रेडर। gist.github.com/jaraco/12abfc05872c65a4f3f6cd58b6f9be4d
जेसन आर।

जवाबों:


252

ऐसी एन्कोडिंग समस्याओं की पूरी कुंजी यह समझना है कि सिद्धांत में "स्ट्रिंग" की दो अलग-अलग अवधारणाएं हैं : (1) वर्णों की स्ट्रिंग , और (2) स्ट्रिंग / बाइट्स की सरणी।। 256 से अधिक वर्णों (ASCII, Latin-1, Windows-1252, Mac OS Roman,…) के साथ एन्कोडिंग की ऐतिहासिक सर्वव्यापकता के कारण इस अंतर को लंबे समय से नजरअंदाज किया गया है: ये एनकोडिंग आम पात्रों का एक सेट मैप करते हैं। 0 और 255 (यानी बाइट्स) के बीच की संख्या; वेब के आगमन से पहले फाइलों के अपेक्षाकृत सीमित आदान-प्रदान ने असंगत एनकोडिंग की इस स्थिति को सहनीय बना दिया, क्योंकि अधिकांश कार्यक्रम इस तथ्य को अनदेखा कर सकते थे कि जब तक वे एक ही ऑपरेटिंग सिस्टम पर बने रहे पाठ का उत्पादन करते हुए कई एन्कोडिंग थे: ऐसे कार्यक्रम बस पाठ को बाइट्स के रूप में समझें (ऑपरेटिंग सिस्टम द्वारा उपयोग किए गए एन्कोडिंग के माध्यम से)। निम्नलिखित दो बिंदुओं के आधार पर सही, आधुनिक दृश्य इन दो स्ट्रिंग अवधारणाओं को ठीक से अलग करता है:

  1. वर्ण ज्यादातर कंप्यूटर से असंबंधित होते हैं : कोई उन्हें चाक बोर्ड पर आकर्षित कर सकता है, आदि, उदाहरण के लिए باي中ون, ث 蟒 और rel। मशीनों के लिए "वर्ण" में "ड्राइंग निर्देश" भी शामिल हैं जैसे उदाहरण के लिए रिक्त स्थान, गाड़ी वापसी, लेखन दिशा निर्धारित करने के लिए निर्देश (अरबी, आदि के लिए), लहजे, आदि। एक बहुत बड़ी चरित्र सूची यूनिकोड मानक में शामिल है ; इसमें अधिकांश ज्ञात चरित्र शामिल हैं।

  2. दूसरी ओर, कंप्यूटर को किसी तरह से सार वर्णों का प्रतिनिधित्व करने की आवश्यकता होती है: इसके लिए, वे बाइट्स (0 और 255 के बीच की संख्या) की सरणियों का उपयोग करते हैं , क्योंकि उनकी स्मृति बाइट विखंडन में आती है। वर्णों को बाइट में परिवर्तित करने वाली आवश्यक प्रक्रिया को एन्कोडिंग कहा जाता है । इस प्रकार, वर्णों का प्रतिनिधित्व करने के लिए कंप्यूटर को एन्कोडिंग की आवश्यकता होती है । आपके कंप्यूटर पर मौजूद कोई भी पाठ एन्कोडेड है (जब तक कि यह प्रदर्शित न हो जाए), चाहे वह किसी टर्मिनल को भेजा जाए (जो एक विशिष्ट तरीके से एन्कोड किए गए वर्णों की अपेक्षा करता है), या किसी फ़ाइल में सहेजा गया। प्रदर्शित होने या ठीक से "समझने" के लिए (द्वारा, पायथन दुभाषिया), बाइट्स की धाराओं को पात्रों में डिकोड किया जाता है। कुछ एनकोडिंग(UTF-8, UTF-16,…) को यूनिकोड द्वारा उसके पात्रों की सूची के लिए परिभाषित किया गया है (यूनिकोड इस प्रकार इन पात्रों के लिए वर्ण और एनकोडिंग दोनों की एक सूची को परिभाषित करता है - अभी भी ऐसे स्थान हैं जहां कोई व्यक्ति "यूनिकोड एन्कोडिंग" को एक के रूप में देखता है सर्वव्यापी यूटीएफ -8 को संदर्भित करने का तरीका, लेकिन यह गलत शब्दावली है, क्योंकि यूनिकोड कई एनकोडिंग प्रदान करता है )।

सारांश में, कंप्यूटर को बाइट्स के साथ वर्णों का आंतरिक रूप से प्रतिनिधित्व करने की आवश्यकता होती है , और वे दो ऑपरेशनों के माध्यम से ऐसा करते हैं:

एन्कोडिंग : वर्ण → बाइट्स

डिकोडिंग : बाइट्स → अक्षर

कुछ एन्कोडिंग सभी वर्णों (जैसे, ASCII) को एन्कोड नहीं कर सकते, जबकि (कुछ) यूनिकोड एनकोडिंग आपको सभी यूनिकोड वर्णों को एनकोड करने की अनुमति देते हैं। एन्कोडिंग भी आवश्यक रूप से अद्वितीय नहीं है , क्योंकि कुछ वर्णों को सीधे या संयोजन के रूप में दर्शाया जा सकता है (उदाहरण के लिए एक आधार चरित्र और लहजे का)।

ध्यान दें कि नई लाइन की अवधारणा जटिलता की एक परत जोड़ती है , क्योंकि इसे विभिन्न (नियंत्रण) वर्णों द्वारा दर्शाया जा सकता है जो ऑपरेटिंग सिस्टम पर निर्भर करते हैं (यह पायथन की यूनिवर्सल न्यूलाइन फाइल रीडिंग मोड का कारण है )।

अब, जिसे मैंने ऊपर "वर्ण" कहा है, जिसे यूनिकोड " उपयोगकर्ता-कथित चरित्र " कहता है । यूनिकोड सूची में विभिन्न अनुक्रमितों पर पाए जाने वाले चरित्र भागों (आधार चरित्र, लहजे, ...) के संयोजन से एक उपयोगकर्ता-कथित चरित्र को कभी-कभी यूनिकोड में दर्शाया जा सकता है , जिसे " कोड पॉइंट " कहा जाता है - इस तरह के कोड बिंदुओं को एक साथ जोड़ा जा सकता है एक "ग्रैपहेम क्लस्टर"। यूनिकोड इस प्रकार स्ट्रिंग की एक तीसरी अवधारणा की ओर जाता है, जो यूनिकोड कोड बिंदुओं के अनुक्रम से बना है, जो बाइट और चरित्र स्ट्रिंग्स के बीच बैठता है, और जो बाद के करीब है। मैं उन्हें " यूनिकोड स्ट्रिंग्स " (जैसे पायथन 2 में) कहूंगा ।

जबकि पायथन (उपयोगकर्ता-कथित) वर्णों के तार मुद्रित कर सकते हैं , पायथन गैर-बाइट तार अनिवार्य रूप से यूनिकोड कोड बिंदुओं के अनुक्रम हैं , उपयोगकर्ता-कथित वर्णों के नहीं। कोड बिंदु मान पायथन \uऔर \Uयूनिकोड स्ट्रिंग सिंटैक्स में उपयोग किए गए हैं । उन्हें एक चरित्र के एन्कोडिंग के साथ भ्रमित नहीं होना चाहिए (और इसके साथ कोई संबंध नहीं रखना है: यूनिकोड कोड बिंदुओं को विभिन्न तरीकों से एन्कोड किया जा सकता है)।

इसका एक महत्वपूर्ण परिणाम है: एक पायथन (यूनिकोड) स्ट्रिंग की लंबाई कोड अंकों की संख्या है, जो हमेशा उपयोगकर्ता-कथित पात्रों की संख्या नहीं होती है : इस प्रकार s = "\u1100\u1161\u11a8"; print(s, "len", len(s))(पायथन 3) एकल उपयोगकर्ता-माना (कोरियाई) होने के 각 len 3बावजूद देता है sचरित्र (क्योंकि यह 3 कोड बिंदुओं के साथ दर्शाया गया है - भले ही यह print("\uac01")शो के रूप में नहीं है )। हालांकि, कई व्यावहारिक परिस्थितियों में, एक स्ट्रिंग की लंबाई उपयोगकर्ता-कथित पात्रों की संख्या है, क्योंकि कई पात्रों को आमतौर पर एक एकल यूनिकोड कोड बिंदु के रूप में पायथन द्वारा संग्रहीत किया जाता है।

में अजगर 2 , यूनिकोड तार कहा जाता है ... "यूनिकोड तार" ( unicodeप्रकार, शाब्दिक रूप u"…") है, जबकि बाइट सरणियों "तार" (हैं strप्रकार, जहां बाइट्स की सरणी उदाहरण के लिए स्ट्रिंग शाब्दिक साथ निर्माण किया जा सकता "…")। में अजगर 3 , यूनिकोड तार बस "तार" (कहा जाता है strप्रकार, शाब्दिक रूप "…",), जबकि बाइट सरणियों "बाइट" (हैं bytesप्रकार, शाब्दिक रूप b"…")। परिणामस्वरूप, "🐍"[0]पायथन 2 ( '\xf0', बाइट) और पायथन 3 ( "🐍", पहला और एकमात्र चरित्र) में कुछ अलग परिणाम देता है ।

इन कुछ प्रमुख बिंदुओं के साथ, आपको संबंधित एन्कोडिंग से संबंधित प्रश्नों को समझने में सक्षम होना चाहिए!


आम तौर पर, जब आप प्रिंट u"…" एक टर्मिनल के लिए , आप नहीं कचरा मिलना चाहिए: अजगर अपने टर्मिनल की एन्कोडिंग को जानता है। वास्तव में, आप जाँच सकते हैं कि टर्मिनल क्या एन्कोडिंग करता है:

% python
Python 2.7.6 (default, Nov 15 2013, 15:20:37) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.stdout.encoding
UTF-8

यदि आपके इनपुट वर्णों को टर्मिनल के एन्कोडिंग के साथ एन्कोड किया जा सकता है, तो पायथन ऐसा करेगा और शिकायत के बिना आपके टर्मिनल को संबंधित बाइट्स भेजेगा। टर्मिनल तब इनपुट बाइट्स को डिकोड करने के बाद वर्णों को प्रदर्शित करने के लिए अपनी पूरी कोशिश करेगा (सबसे खराब टर्मिनल फ़ॉन्ट में कुछ वर्ण नहीं हैं और इसके बजाय किसी प्रकार का रिक्त प्रिंट करेगा)।

यदि आपके इनपुट वर्णों को टर्मिनल के एन्कोडिंग के साथ एन्कोड नहीं किया जा सकता है, तो इसका मतलब है कि टर्मिनल इन पात्रों को प्रदर्शित करने के लिए कॉन्फ़िगर नहीं किया गया है। पायथन शिकायत करेगा ( UnicodeEncodeErrorचरित्र स्ट्रिंग के साथ पायथन में एक तरह से एन्कोड नहीं किया जा सकता है जो आपके टर्मिनल पर सूट करता है)। एकमात्र संभव समाधान एक टर्मिनल का उपयोग करना है जो वर्णों को प्रदर्शित कर सकता है (या तो टर्मिनल को कॉन्फ़िगर करके ताकि यह एक एन्कोडिंग को स्वीकार करता है जो आपके पात्रों का प्रतिनिधित्व कर सकता है, या एक अलग टर्मिनल प्रोग्राम का उपयोग करके)। यह महत्वपूर्ण है जब आप उन प्रोग्रामों को वितरित करते हैं जो विभिन्न वातावरणों में उपयोग किए जा सकते हैं: आपके द्वारा प्रिंट किए जाने वाले संदेश उपयोगकर्ता के टर्मिनल में प्रतिनिधित्व करने योग्य होने चाहिए। कभी-कभी इस प्रकार स्ट्रिंग्स से चिपकना सबसे अच्छा होता है जिसमें केवल एएससीआईआई अक्षर होते हैं।

हालाँकि, जब आप अपने प्रोग्राम के आउटपुट को रीडायरेक्ट या पाइप करते हैं , तो आमतौर पर यह जानना संभव नहीं होता है कि प्राप्त प्रोग्राम का इनपुट एन्कोडिंग क्या है, और उपरोक्त कोड कुछ डिफ़ॉल्ट एन्कोडिंग देता है: कोई नहीं (पायथन 2.7) या UTF-8 ( अजगर 3):

% python2.7 -c "import sys; print sys.stdout.encoding" | cat
None
% python3.4 -c "import sys; print(sys.stdout.encoding)" | cat
UTF-8

स्टड, stdout और stderr की एन्कोडिंग हालांकि जरूरत पड़ने पर पर्यावरण चर के माध्यम से सेट की जा सकती है PYTHONIOENCODING:

% PYTHONIOENCODING=UTF-8 python2.7 -c "import sys; print sys.stdout.encoding" | cat
UTF-8

यदि किसी टर्मिनल पर छपाई वह नहीं है जो आप उम्मीद करते हैं, तो आप UTF-8 एन्कोडिंग की जांच कर सकते हैं जिसे आपने मैन्युअल रूप से रखा है, सही है; उदाहरण के लिए, आपका पहला चरित्र ( \u001A) प्रिंट करने योग्य नहीं है, अगर मैं गलत नहीं हूँ

पर http://wiki.python.org/moin/PrintFails , आप अजगर 2.x के लिए निम्नलिखित की तरह एक समाधान है, पा सकते हैं:

import codecs
import locale
import sys

# Wrap sys.stdout into a StreamWriter to allow writing unicode.
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout) 

uni = u"\u001A\u0BC3\u1451\U0001D10C"
print uni

पायथन 3 के लिए, आप StackOverflow पर पहले पूछे गए प्रश्नों में से एक की जाँच कर सकते हैं ।


2
@ श्रद्धा: धन्यवाद! मैंने पायथन 3. के लिए कुछ जानकारी जोड़ी।
एरिक ओ लेबिगॉट 15

2
श्रीमान धन्यवाद! मुझे इतने लंबे समय तक इस स्पष्टीकरण की आवश्यकता थी ... यह अफ़सोस की बात है कि मैं आपको केवल एक उत्थान दे सकता हूं।
mik01aj

3
मुझे खुशी है कि मुझे मदद मिली, @ m01! इस उत्तर को लिखने के लिए एक प्रेरणा यह थी कि यूनिकोड और पायथन के बारे में वेब पर कई पेज थे, लेकिन मैंने पाया कि दिलचस्प होने के बावजूद, उन्होंने मुझे पूरी तरह से ठोस एन्कोडिंग समस्याओं को हल करने की अनुमति नहीं दी ... मुझे वास्तव में विश्वास है कि ध्यान में रखते हुए इस जवाब में पाए गए सिद्धांत और ठोस एन्कोडिंग समस्याओं को हल करते समय उनका उपयोग करने के लिए समय लेना बहुत मदद करता है।
एरिक ओ लेबिगॉट

3
यह यूनिकोड और पाइथन की अब तक की सबसे अच्छी व्याख्या है। पायथन यूनिकोड HOWTO को इसके साथ प्रतिस्थापित किया जाना चाहिए।
स्टानटॉन्क

1
यहाँ, मुझे इस चॉकबोर्ड पर "दाएँ-से-बाएँ ओवरराइड" वर्ण आकर्षित करने के लिए ...
icktoofay

20

पाइथन हमेशा एक टर्मिनल, फ़ाइल, पाइप आदि को लिखते समय यूनिकोड के तारों को एनकोड करता है। टर्मिनल पर लिखते समय पाइथन आमतौर पर टर्मिनल की एन्कोडिंग निर्धारित कर सकता है और इसका सही ढंग से उपयोग कर सकता है। जब एक फ़ाइल या पाइप पर लिखते हैं तो पायथन 'एससीआई' एन्कोडिंग में चूक जाता है जब तक कि स्पष्ट रूप से अन्यथा नहीं बताया जाता है। पाइथन को बताया जा सकता है कि PYTHONIOENCODINGपर्यावरण चर के माध्यम से आउटपुट करते समय क्या करना है । एक शेल एक फ़ाइल या पाइप पर पुनर्निर्देशित करने से पहले इस चर को सेट कर सकता है ताकि सही एन्कोडिंग ज्ञात हो।

आपके मामले में आपने 4 असामान्य अक्षर मुद्रित किए हैं जो आपके टर्मिनल ने अपने फ़ॉन्ट में समर्थन नहीं किया है। व्यवहार को समझाने में मदद करने के लिए यहां कुछ उदाहरण दिए गए हैं, जो वास्तव में मेरे टर्मिनल द्वारा समर्थित हैं (जो कि cp437 का उपयोग करता है, न कि UTF-8)।

उदाहरण 1

ध्यान दें कि #codingटिप्पणी एन्कोडिंग को इंगित करती है जिसमें स्रोत फ़ाइल सहेजी गई है। मैंने utf8 चुना ताकि मैं अपने टर्मिनल में पात्रों का समर्थन कर सकूं। Stderr पर पुनर्निर्देशित एन्कोडिंग तो यह देखा जा सकता है जब एक फ़ाइल पर पुनर्निर्देशित किया जाता है।

#coding: utf8
import sys
uni = u'αßΓπΣσµτΦΘΩδ∞φ'
print >>sys.stderr,sys.stdout.encoding
print uni

आउटपुट (टर्मिनल से सीधे रन)

cp437
αßΓπΣσµτΦΘΩδ∞φ

पायथन ने टर्मिनल के एन्कोडिंग को सही ढंग से निर्धारित किया।

आउटपुट (फ़ाइल पर पुनर्निर्देशित)

None
Traceback (most recent call last):
  File "C:\ex.py", line 5, in <module>
    print uni
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordinal not in range(128)

पायथन एन्कोडिंग (कोई नहीं) निर्धारित नहीं कर सका इसलिए 'एससीआईई' डिफ़ॉल्ट का इस्तेमाल किया। ASCII केवल यूनिकोड के पहले 128 अक्षरों को परिवर्तित करने का समर्थन करता है।

आउटपुट (फ़ाइल पर पुनर्निर्देशित, PYTHONIOENCODING = cp437)

cp437

और मेरी आउटपुट फ़ाइल सही थी:

C:\>type out.txt
αßΓπΣσµτΦΘΩδ∞φ

उदाहरण 2

अब मैं उस स्रोत के एक चरित्र को फेंक दूंगा जो मेरे टर्मिनल द्वारा समर्थित नहीं है:

#coding: utf8
import sys
uni = u'αßΓπΣσµτΦΘΩδ∞φ马' # added Chinese character at end.
print >>sys.stderr,sys.stdout.encoding
print uni

आउटपुट (टर्मिनल से सीधे रन)

cp437
Traceback (most recent call last):
  File "C:\ex.py", line 5, in <module>
    print uni
  File "C:\Python26\lib\encodings\cp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u9a6c' in position 14: character maps to <undefined>

मेरा टर्मिनल उस अंतिम चीनी चरित्र को नहीं समझ पाया।

आउटपुट (सीधे चलाएँ, PYTHONIOENCODING = 437: प्रतिस्थापित करें)

cp437
αßΓπΣσµτΦΘΩδ∞φ?

एन्कोडिंग के साथ त्रुटि हैंडलर निर्दिष्ट किए जा सकते हैं। इस मामले में अज्ञात पात्रों को बदल दिया गया था ?ignoreऔर xmlcharrefreplaceकुछ अन्य विकल्प हैं। UTF8 का उपयोग करते समय (जो सभी यूनिकोड वर्ण को एन्कोडिंग का समर्थन करता है) प्रतिस्थापन कभी नहीं किए जाएंगे, लेकिन पात्रों को प्रदर्शित करने के लिए उपयोग किए जाने वाले फ़ॉन्ट को अभी भी उनका समर्थन करना चाहिए।


यह बिल्कुल सच नहीं है कि "जब किसी फ़ाइल या पाइप पर लिखते हैं तो पायथन 'एससीआई' एन्कोडिंग में चूक जाता है जब तक कि स्पष्ट रूप से अन्यथा नहीं बताया गया हो।"। वास्तव में, पायथन 3 मैक ओएस एक्स / फिंक पर यूटीएफ -8 का उपयोग करता है।
एरिक ओ लेबिगॉट

2
हां, पायथन 3 'utf8' को डिफॉल्ट करता है, लेकिन ओपी के नमूने के आधार पर, वह पायथन 2.X का उपयोग कर रहा है, जो 'एससीआई' को चूकता है।
मार्क टॉलेनन

मैं जोड़ तोड़ करके सही आउटपुट नहीं पा सका PYTHONIOENCODINGprint string.encode("UTF-8")@Ismail द्वारा सुझाए अनुसार कर मेरे लिए काम किया।
ट्रिपलए

आप चीनी अक्षरों को देख सकते हैं यदि कोड फ़ॉन्ट का chcpसमर्थन नहीं करता है तो भी आपका फ़ॉन्ट उनका समर्थन करता है। बचने के लिए UnicodeEncodeError: 'charmap', आप win-unicode-consoleपैकेज स्थापित कर सकते हैं ।
jfs

मेरी समस्या यह है कि python-gitlab CLI चीनी अक्षरों को cmd में अच्छी तरह से प्रिंट करता है, लेकिन फाइलों में रीडायरेक्ट होने के बाद अक्षर कचरा हो जाते हैं। PYTHONIOENCODING=utf-8समस्या हल करता है।
एलेप्पीके

12

इसे प्रिंट करते समय एनकोड करें

uni = u"\u001A\u0BC3\u1451\U0001D10C"
print uni.encode("utf-8")

ऐसा इसलिए है क्योंकि जब आप स्क्रिप्ट को मैन्युअल रूप से चलाते हैं तो अजगर इसे टर्मिनल पर आउटपुट करने से पहले इनकोड करता है, जब आप इसे पाइप करते हैं तो अजगर इसे स्वयं एनकोड नहीं करता है इसलिए आपको I / O करते समय मैन्युअल रूप से एनकोड करना होगा।


4
यह अभी भी इस सवाल का जवाब नहीं देता है कि WTH यहां चल रहा है। क्यों, नीले रंग से बाहर केवल पुनर्निर्देशित करने के लिए सांकेतिक शब्दों में बदलना तय करता है, जब इस प्रक्रिया को पूरी तरह से पारदर्शी माना जाता है।
मैक्सिम साल्को

पुनर्निर्देशन करते समय अजगर इसे क्यों नहीं समझता है? क्या अजगर स्पष्ट रूप से जांचता है और यह तय करता है कि यह सिर्फ मुश्किल होने के लिए चीजों को अलग तरीके से करेगा?
अराफंगियन

1
क्या अजगर के पास दो स्थितियों को अलग करने का एक तरीका भी है? मैं (अब तक ...) कि वहाँ कोई रास्ता नहीं यह पता कर सकते है।
zedoo

4
पायथन यह जांच सकता है कि क्या आउटपुट एक टर्मिनल है, यदि इसकी पाइपिंग आउटपुट है, तो टर्मिनल प्रकार "डंब" होगा। मुझे लगता है कि "गूंगा" आपको यह बताना चाहिए कि पायथन इस मामले में कुछ भी करने की कोशिश क्यों नहीं करता, यह विफल हो सकता है।
इस्माइल

1
यदि वातावरण एक ऐसे एन्कोडिंग का उपयोग करता है जो utf-8 के साथ असंगत है (उदाहरण के लिए, यह विंडोज पर आम है) तो मोजिबेक पैदा करता है। अपने स्क्रिप्ट के अंदर अपने पर्यावरण के चरित्र एन्कोडिंग को हार्डकोड न करें। अपना स्थान, या PYTHONIOENCODING कॉन्फ़िगर करें, या स्थापित करें win-unicode-console(Windows), या कमांड-लाइन पैरामीटर स्वीकार करें (यदि आपको चाहिए)।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.