আপনি কীভাবে কোনও ইউনিকোড স্ট্রিংকে (characters $ ইত্যাদির মতো অতিরিক্ত অক্ষরযুক্ত) পাইথন স্ট্রিংয়ে রূপান্তর করবেন?
unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
আপনি কীভাবে কোনও ইউনিকোড স্ট্রিংকে (characters $ ইত্যাদির মতো অতিরিক্ত অক্ষরযুক্ত) পাইথন স্ট্রিংয়ে রূপান্তর করবেন?
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'
যদি স্ট্রিংটিতে কেবল আসকি অক্ষর থাকে।
আপনার যদি ইউনিকোড স্ট্রিং থাকে এবং আপনি এটি কোনও ফাইল বা অন্য ক্রমিক আকারে লিখতে চান তবে আপনাকে প্রথমে এটি নির্দিষ্ট উপস্থাপনায় এনকোড করতে হবে যা সঞ্চয় করা যায়। কয়েকটি ইউনিকোড এনকোডিং রয়েছে যেমন ইউটিএফ -16 (বেশিরভাগ ইউনিকোড অক্ষরের জন্য দুটি বাইট ব্যবহার করে) বা ইউটিএফ -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'
utf8
এখানে প্রদর্শিত হিসাবে ইউরো প্রতীকটি এনকোড করেছি , ফলাফলটি কেবল প্রশ্ন চিহ্ন? এখানে আমার পাইথনের একটি চিত্র , সংস্করণ 2.7.13। (আমি অন্যান্য ইউনিকোড অবজেক্টগুলিকে যেমন এনকোড করতে পারি u"Klüft"
তবে ইউরো নয়?)
ঠিক আছে, আপনি যদি পাইথন 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 ব্যবহার করছেন তবে সমস্যাটি সম্ভবত আপনি কোনও ফাইলটিতে টেক্সটটি সংরক্ষণ করার চেষ্টা করছেন এমন কিছু করার দরকার রয়েছে something)
এখানে একটি উদাহরণ কোড
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)
পাইথন ৩.x:print type(unicode_string), ascii(unicode_string)
তারপরে আপনার প্রশ্নটি সম্পাদনা করুন এবং উপরের মুদ্রণ বিবরণের ফলাফল অনুলিপি / অনুলিপি করুন। ফলাফলগুলি আবার টাইপ করবেন না। আপনার এইচটিএমএলের শীর্ষের কাছাকাছি সন্ধান করুন এবং দেখুন যে আপনি এর মতো কিছু খুঁজে পেতে পারেন: <মেটা http-برابر = "বিষয়বস্তুর ধরণ" বিষয়বস্তু = "পাঠ্য / এইচটিএমএল; চরসেট = আইসো -8859