पायथन स्ट्रिंग में यू उपसर्ग क्या है?


232

जैसे की:

u'Hello'

मेरा अनुमान है कि यह "यूनिकोड" को इंगित करता है, क्या यह सही है?

यदि हां, तो कब से उपलब्ध है?

जवाबों:


147

आप सही हैं, 3.1.3 देखें यूनिकोड स्ट्रिंग्स

यह पायथन 2.0 के बाद से वाक्यविन्यास है।

पायथन 3 ने उन्हें निरर्थक बना दिया, क्योंकि डिफ़ॉल्ट स्ट्रिंग प्रकार यूनिकोड है। 3.2 के माध्यम से संस्करणों 3.0 ने उन्हें हटा दिया, लेकिन उन्हें 2 से 3 संक्रमण के लिए पायथन 2 के साथ संगतता के लिए 3.3+ में फिर से जोड़ा गया


6
एक को जोड़ना चाहिए कि यह अब पायथन 3 में आवश्यक नहीं है, लेकिन फिर भी मान्य सिंटैक्स है।
मार्टिन थोमा

यूथोड + रॉ (रेगेक्स) स्ट्रिंग्स (जैसे ur"string") का संयोजन पाइथन 2 में मान्य है, लेकिन यह दुर्भाग्य से पाइथन 3 में अमान्य सिंटैक्स है।
काउलिलेटर

123

यू का u'Some String'अर्थ है कि आपका स्ट्रिंग एक यूनिकोड स्ट्रिंग है

प्रश्न: मैं एक भयानक, भयानक जल्दी में हूं और मैं Google खोज से यहां पहुंचा हूं। मैं इस डेटा को एक फ़ाइल में लिखने की कोशिश कर रहा हूं, मुझे एक त्रुटि मिल रही है, और मुझे मृत सरलतम, शायद त्रुटिपूर्ण, इस दूसरे समाधान की आवश्यकता है।

ए: आपको वास्तव में जोएल के निरपेक्ष न्यूनतम हर सॉफ्टवेयर डेवलपर को बिल्कुल पढ़ना चाहिए , सकारात्मक रूप से यूनिकोड और चरित्र सेट (कोई बहाना नहीं!) चरित्र सेट पर निबंध के बारे में पता होना चाहिए

क्यू: sry कोई समय कोड pls

ठीक है। कोशिश करो str('Some String')या 'Some String'.encode('ascii', 'ignore')। लेकिन आपको यूनिकोड स्ट्रिंग को बदलने और चरित्र एन्कोडिंग पर इस उत्कृष्ट, उत्कृष्ट, प्राइमर पर वास्तव में कुछ उत्तरों और चर्चा को पढ़ना चाहिए ।


6
यह काम करता है यदि स्ट्रिंग में केवल ASCII पाठ है । अन्य सभी मामलों में आपको स्पष्ट रूप से एनकोड करना होगा।
मार्टिन पीटर्स

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

2
@ LennartRegebro पूरी तरह से सहमत है - यह एक थका देने वाला जवाब था जो गाल में जीभ होना था, लेकिन इसने एक तरह की भयानक संख्या को बढ़ा दिया। सही दिशा में लोगों को चलाने की कोशिश करने के लिए संपादित किया गया।
एंड्रयू

1
यह एक मजेदार पढ़ा था! धन्यवाद! अनुच्छेद 17 वर्ष पुराना है और यह अभी भी सटीक है। वाह।
केर्विन स्नेज

52

मेरा अनुमान है कि यह "यूनिकोड" को इंगित करता है, क्या यह सही है?

हाँ।

यदि हां, तो कब से उपलब्ध है?

अजगर 2.x.

पायथन 3.x में तार डिफ़ॉल्ट रूप से यूनिकोड का उपयोग करते हैं और uउपसर्ग की कोई आवश्यकता नहीं है । नोट: पायथन 3.0-3.2 में, यू एक वाक्यविन्यास त्रुटि है। पायथन 3.3+ में 2/3 संगत ऐप्स को लिखना आसान बनाने के लिए फिर से कानूनी है।


4
यह uउपसर्ग का उपयोग करने के लिए पायथन 3 में एक सिंटैक्स त्रुटि भी है ।
टिम पीत्ज़ेकर

14
@ टिमपिट्ज़र: केवल 3.0-3.2 में; 3.3+ में यह कानूनी (और अर्थहीन) है, जिससे 2.6 + / 3.3 + एकल-कोडबेस लाइब्रेरी और ऐप्स लिखना आसान हो जाता है।
23

@abarnert: खैर, यह टिप्पणी अब साढ़े चार साल पुरानी है
टिम पीटरज़

3
@TimPietzcker: ज़रूर, लेकिन जैसा कि आपकी टिप्पणी किसी के लिए उपयोगी थी, किसी ने भी इस उपयोगी उत्तर को 2010 में खोज कर पाया, मुझे लगता है कि 2014 में इसे खोजने वाले 3.3 में किसी के भी बदलाव का उल्लेख करना उपयोगी है। यकीनन इसे संपादित करना बेहतर होगा। जवाब दें, लेकिन मुझे लगता है कि यह एक मामूली बात है कि ज्यादातर लोग इसमें भाग नहीं लेंगे (क्योंकि जब तक आप 2014 में 3.0-3.2 का उपयोग नहीं कर रहे हैं, "उपसर्ग की कोई आवश्यकता नहीं है" आपको सभी को जानना होगा)।
१ert

यदि आप उपयोगकर्ताओं को डाउनलोड करने और चलाने के लिए मनमाने ढंग से कोड लिख रहे हैं, और मान्यताओं के बिना सबसे संभव मामलों को कवर करना चाहते हैं, तो यह जानना उपयोगी है कि 3.0-3.2 टूट जाएगा। क्योंकि आपको यह तय करने की आवश्यकता है कि क्या आप six.text_type()अभी भी उपयोग करने वाले लोगों की उम्मीद के लिए हर जगह उपयोग करते हैं (उम्मीद है कि miniscule) अभी भी 3. [012] - कम से कम जानकारी वहाँ है तो आप चुन सकते हैं।
dwanderson

3

मैं यहां आया क्योंकि मुझे अपने requestsआउटपुट पर फनी-चार-सिंड्रोम था । मैंने सोचा था response.textकि मुझे ठीक से डिकोड किया गया स्ट्रिंग मिलेगा, लेकिन आउटपुट में मुझे मजाकिया डबल-चार मिले जहां जर्मन umlauts होना चाहिए था।

टर्न आउट response.encodingकिसी तरह से खाली था और इसलिए responseयह नहीं पता था कि सामग्री को ठीक से कैसे डिकोड किया जाए और इसे ASCII के रूप में माना जाए (मुझे लगता है)।

मेरा समाधान था कि 'प्रतिक्रिया. कॉन्टेंट' के साथ कच्ची बाइट्स प्राप्त करूं और मैन्युअल रूप decode('utf_8')से उस पर लागू हो। नतीजा स्कोने उमलाउत था

सही ढंग से डिकोड किया गया

फर

बनाम अनुचित रूप से डिकोड किया गया

fĂźr


2

मनुष्यों के लिए बने सभी तारों को यू "" का उपयोग करना चाहिए।

मैंने पाया कि पायथन स्ट्रिंग्स के साथ काम करते समय निम्नलिखित मानसिकता बहुत मदद करती है: सभी पायथन प्रकट स्ट्रिंग्स को u""सिंटैक्स का उपयोग करना चाहिए । ""वाक्य रचना, केवल बाइट सरणियों के लिए है।

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

लेकिन, यदि आप मेरे नियम का पालन करते हैं, तो आपको यह संक्रमण नहीं होगा (क्योंकि आप पहले से ही संक्रमित होंगे)।


bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
19 मई को kennytm

@ केनीटीएम अच्छा लगता है! सीधे तौर पर कहने का मतलब है कि इंसानों के लिए इस्तेमाल किए जाने वाले सभी तार u""
फ्रैंक क्रुगर

1
यदि आप हर जगह यूनिकोड का धार्मिक रूप से उपयोग करना चाहते हैं - जो, कई अनुप्रयोगों के लिए (लेकिन सभी नहीं), एक अच्छी बात है - आप लगभग निश्चित रूप से अजगर 3.x चाहते हैं, 2.x नहीं। हो सकता है कि २०१० में यह लिखा गया हो, लेकिन २०१४ में, अधिकांश पुस्तकालय या मंच जो आपको ३.x पर अपग्रेड करने से रोकते हैं, आपको यूनिकोड का सही उपयोग करने से भी रोकेंगे ...
०१:०१

1

यह यूनिकोड है।

बस के बीच चर डाल दिया str(), और यह ठीक काम करेगा।

लेकिन अगर आपके पास निम्नलिखित की तरह दो सूचियाँ हैं:

a = ['co32','co36']
b = [u'co32',u'co36']

यदि आप जांच करते हैं set(a)==set(b), तो यह गलत के रूप में आएगा, लेकिन यदि आप निम्नानुसार करते हैं:

b = str(b)
set(a)==set(b)

अब, परिणाम सच होगा।


खतरा, खतरा। एन्कोडिंग पास किए बिना आपको कभी भी यूनिकोड ( str()या u'€'.encode()) को एनकोड नहीं करना चाहिए । यदि स्ट्रिंग में गैर-एएससीआईआई है तो उपयोगकर्ता को एक यूनिकोड ईकोडकोड प्राप्त होगा।
एलिस्टेयर मैककॉर्मैक

3
इसके अलावा, आपका कोड काम नहीं करता है। b = str(b)बस repr()सूची का तार देता है , अर्थात b = "[u'co32', u'co36']"। फिरset(a)==set(b) = False
अलास्टेयर मैककॉर्मैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.