पायथन 3 के साथ यूनिकोड स्ट्रिंग कैसे बनाएं


100

मैंने इसका उपयोग किया:

u = unicode(text, 'utf-8')

लेकिन पायथन 3 के साथ त्रुटि हो रही है (या ... शायद मैं सिर्फ कुछ शामिल करना भूल गया):

NameError: global name 'unicode' is not defined

धन्यवाद।


17
यदि अजगर 3 में अपग्रेड करने का एक भयानक कारण है तो यह डिफ़ॉल्ट रूप से यूनिकोड है।
जर्नार्डो

जवाबों:


138

पायथन 3 में डिफ़ॉल्ट रूप से लिटरल स्ट्रिंग्स यूनिकोड हैं।

मान लेना कि textएक bytesवस्तु है, बस उपयोग करेंtext.decode('utf-8')

unicodePython2 Python3 के बराबर है str, इसलिए आप यह भी लिख सकते हैं:

str(text, 'utf-8')

आप चाहें तो।


59
TypeError: डिकोडिंग str समर्थित नहीं है
Gank

9
@Gank, पायथन 3 में एक strयूनिकोड है, अर्थात। यह "डिकोडेड" है, इसलिए इस decodeपर कॉल करने का कोई मतलब नहीं है
जॉन ला रोय

एक ही प्रकार। कृपया केवल str (txt), या नीचे दिए गए कोड से नीचे की जगह @ सिमुरेबर्थ
सिमोन

3
मूल नमूना स्पष्ट नहीं है। तो python3 में, यदि आप करना चाहते हैं str(text, 'utf-8'), तो पाठ को एक स्ट्रिंग बाइनरी होना चाहिए। जैसेstr(b'this is a binary', 'utf-8')
किलुआ 8 पी

10

पायथन 3.0 में नया क्या है :

सभी पाठ यूनिकोड है; हालांकि एन्कोडेड यूनिकोड को बाइनरी डेटा के रूप में दर्शाया गया है

यदि आप यह सुनिश्चित करना चाहते हैं कि आप utf-8 का उत्पादन कर रहे हैं, तो यहां इस पृष्ठ का एक उदाहरण 3.0 में यूनिकोड पर दिया गया है :

b'\x80abc'.decode("utf-8", "strict")

1
पायथन 2 में '\ x80abc'.decode ("utf-8", "सख्त") के लिए हमें ठीक यही चाहिए, धन्यवाद
workplaylifecycle

9

वर्कअराउंड के रूप में, मैं इसका उपयोग कर रहा हूं:

# Fix Python 2.x.
try:
    UNICODE_EXISTS = bool(type(unicode))
except NameError:
    unicode = lambda s: str(s)

12
आप एक लंबोतरा फ़ंक्शन का उपयोग क्यों कर रहे हैं? इन तरीकों को किसी भी मामले में उसी तरह कहा जाता है। यह एक सरल भिन्नता है try: unicode = str; except: pass:।
निकोलस बोलियान

1
ऐसा लगता है जैसे आप बस कर सकते हैं unicode = strक्योंकि यह 2 या 3 में विफल नहीं होगा
निकोलाई

या from six import u as unicodeजो मैं सिर्फ इसलिए पसंद करूंगा क्योंकि यह अधिक स्व-दस्तावेजीकरण है (चूंकि छह एक 2/3 संगतता परत है)unicode = str
निकोलई

3

यह कैसे मैंने \ uFE0F, \ u000A, आदि जैसे चार्ट को बदलने के लिए अपनी समस्या को हल किया और 16 बाइट्स के साथ एन्कोड किए गए इमोजी भी।

example = 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\\uD83D\\uDE0D\\uD83D\\uDE0D\\u2764\\uFE0F Present Moment Caf\\u00E8 in St.Augustine\\u2764\\uFE0F\\u2764\\uFE0F '
import codecs
new_str = codecs.unicode_escape_decode(example)[0]
print(new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\ud83d\ude0d\ud83d\ude0d❤️ Present Moment Cafè in St.Augustine❤️❤️ '
new_new_str = new_str.encode('utf-16', 'surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream😍😍❤️ Present Moment Cafè in St.Augustine❤️❤️ '

0

पायथन 2 कार्यक्रम में जिसका उपयोग मैंने कई वर्षों से किया था, यह पंक्ति थी:

ocd[i].namn=unicode(a[:b], 'utf-8')

यह पायथन 3 में काम नहीं किया।

हालांकि, कार्यक्रम के साथ काम करने के लिए निकला:

ocd[i].namn=a[:b]

मुझे याद नहीं है कि मैंने पहले स्थान पर यूनिकोड क्यों रखा था, लेकिन मुझे लगता है कि यह इसलिए था क्योंकि नाम में स्वीडिश पत्र शामिल हो सकते हैं। लेकिन यहां तक ​​कि वे "यूनिकोड" के बिना काम करते हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.