आप एक यूनिकोड स्ट्रिंग (£ £, आदि जैसे अतिरिक्त वर्णों सहित) को पायथन स्ट्रिंग में कैसे परिवर्तित करते हैं?
unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
आप एक यूनिकोड स्ट्रिंग (£ £, आदि जैसे अतिरिक्त वर्णों सहित) को पायथन स्ट्रिंग में कैसे परिवर्तित करते हैं?
unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
जवाबों:
title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii', 'ignore')
'Kluft skrams infor pa federal electoral groe'
unicode
str
type(title) == unicode and type(title.encode('utf-8')) == str
। इनपुट को भ्रष्ट करने की आवश्यकता नहीं है, एक बाइटस्ट्रिंग प्राप्त करने के लिए जिसे किसी फ़ाइल में सहेजा जा सकता है।
यदि आप गैर- ASCII वर्णों का अनुवाद करने की आवश्यकता नहीं है, तो आप ASCII को एनकोड का उपयोग कर सकते हैं:
>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>
ignore
बनामreplace
a.encode('ascii', 'xmlcharrefreplace')
देता है 'aaaàçççñññ'
।
type(a)
है str
पायथन 3.6.8 में और किसी भी जरूरत नहीं है encode()
विधि।
>>> text=u'abcd'
>>> str(text)
'abcd'
यदि स्ट्रिंग में केवल एएससीआई अक्षर हैं।
यदि आपके पास एक यूनिकोड स्ट्रिंग है, और आप इसे एक फ़ाइल, या अन्य क्रमबद्ध रूप में लिखना चाहते हैं, तो आपको पहले इसे एक विशेष प्रतिनिधित्व में एनकोड करना होगा जिसे संग्रहीत किया जा सकता है। कई सामान्य यूनिकोड एनकोडिंग हैं, जैसे कि UTF-16 (अधिकांश यूनिकोड वर्णों के लिए दो बाइट्स का उपयोग करता है) या UTF-8 (वर्ण के आधार पर 1-4 बाइट्स / कोडपॉइंट), आदि उस स्ट्रिंग को किसी विशेष एन्कोडिंग में बदलने के लिए, आप उपयोग कर सकते हैं:
>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'
बाइट्स के इस कच्चे स्ट्रिंग को एक फ़ाइल में लिखा जा सकता है। हालाँकि, ध्यान दें कि इसे वापस पढ़ते समय, आपको पता होना चाहिए कि इसमें कौन सी एन्कोडिंग है और उसी एन्कोडिंग का उपयोग करके इसे डीकोड करें।
फ़ाइलों को लिखते समय, आप कोडेक्स मॉड्यूल का उपयोग करके इस मैनुअल एनकोड / डिकोड प्रक्रिया से छुटकारा पा सकते हैं । इसलिए, यूटीएफ -8 में सभी यूनिकोड स्ट्रिंग्स को एनकोड करने वाली फाइल को खोलने के लिए उपयोग करें:
import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string) # Stored on disk as UTF-8
ध्यान दें कि इन फ़ाइलों का उपयोग करने वाले किसी और चीज़ को समझना चाहिए कि यदि वे उन्हें पढ़ना चाहते हैं तो फ़ाइल को एन्कोडिंग क्या है। यदि आप केवल पढ़ने / लिखने का काम कर रहे हैं, तो यह कोई समस्या नहीं है, अन्यथा सुनिश्चित करें कि आप फ़ाइलों को उपयोग करने वाले किसी अन्य द्वारा समझने योग्य रूप में लिखते हैं।
पायथन 3 में, फ़ाइल एक्सेस का यह रूप डिफ़ॉल्ट है, और अंतर्निहित open
फ़ंक्शन एन्कोडिंग पैरामीटर लेगा और टेक्स्ट मोड में खोली गई फ़ाइलों के लिए यूनिकोड स्ट्रिंग्स (पायथन 3 में डिफ़ॉल्ट स्ट्रिंग ऑब्जेक्ट) से हमेशा अनुवाद / / करेगा।
यहाँ एक उदाहरण है:
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
ठीक है, यदि आप अजगर 3 पर स्विच करने के लिए तैयार / तैयार हैं (जो कि आप कुछ पायथन 2 कोड के साथ पीछे की असंगति के कारण नहीं हो सकते हैं), तो आपको कोई परिवर्तित करने की आवश्यकता नहीं है; पायथन 3 के सभी पाठों को यूनिकोड स्ट्रिंग्स के साथ दर्शाया गया है, जिसका अर्थ यह भी है कि इसका अधिक उपयोग नहीं हैu'<text>'
वाक्य रचना । आपके पास भी क्या हैं, वास्तव में, बाइट्स के तार, जो डेटा का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं (जो एक एन्कोडेड स्ट्रिंग हो सकता है)।
http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(बेशक, अगर आप वर्तमान में पायथन 3 का उपयोग कर रहे हैं, तो समस्या यह है कि आप पाठ को फ़ाइल में सहेजने का प्रयास कर रहे हैं।
यहाँ एक उदाहरण कोड है
import unicodedata
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
फ़ाइल में यूनिकोड-एसैपेड स्ट्रिंग है
\"message\": \"\\u0410\\u0432\\u0442\\u043e\\u0437\\u0430\\u0446\\u0438\\u044f .....\",
मेरे लिए
f = open("56ad62-json.log", encoding="utf-8")
qq=f.readline()
print(qq)
{"log":\"message\": \"\\u0410\\u0432\\u0442\\u043e\\u0440\\u0438\\u0437\\u0430\\u0446\\u0438\\u044f \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"}
(qq.encode().decode("unicode-escape").encode().decode("unicode-escape"))
# '{"log":"message": "Авторизация пользователя"}\n'
result.encode().decode('unicode-escape')
किसी भी उत्तरदाता ने मेरे मामले के लिए काम नहीं किया, जहां मेरे पास एक स्ट्रिंग चर था जिसमें यूनिकोड वर्ण थे, और किसी भी एन्कोड-डिकोड के बारे में यहां नहीं बताया गया था।
अगर मैं एक टर्मिनल में करता हूं
echo "no me llama mucho la atenci\u00f3n"
या
python3
>>> print("no me llama mucho la atenci\u00f3n")
आउटपुट सही है:
output: no me llama mucho la atención
लेकिन इस स्ट्रिंग चर को लोड करने वाली स्क्रिप्ट के साथ काम नहीं किया।
यह वही है जो मेरे मामले में काम करता है, यदि कोई मामले में मदद करता है:
string_to_convert = "no me llama mucho la atenci\u00f3n"
print(json.dumps(json.loads(r'"%s"' % string_to_convert), ensure_ascii=False))
output: no me llama mucho la atención
print type(unicode_string), repr(unicode_string)
पायथन 3.x:print type(unicode_string), ascii(unicode_string)
फिर अपना प्रश्न संपादित करें और उपरोक्त प्रिंट स्टेटमेंट के परिणामों को कॉपी / पेस्ट करें। परिणामों को फिर से न लिखें। अपने HTML के शीर्ष के पास भी देखें और देखें कि क्या आप ऐसा कुछ पा सकते हैं: <meta http-equiv = "Content-Type" सामग्री = "text / html; charset = iso-8859