পাইথন 3-এ কিভাবে 'বাইনারি স্ট্রিং'কে সাধারণ স্ট্রিংয়ে রূপান্তর করা যায়?


256

উদাহরণস্বরূপ, আমার কাছে এর মতো স্ট্রিং রয়েছে (এর ফেরতের মান subprocess.check_output):

>>> b'a string'
b'a string'

আমি এটি যাই করলাম না কেন, এটি b'স্ট্রিংয়ের আগে সর্বদা বিরক্তিকর সাথে মুদ্রিত হয় :

>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'

এটিকে কীভাবে সাধারণ স্ট্রিং হিসাবে ব্যবহার করতে হয় বা এটিকে একটি সাধারণ স্ট্রিংয়ে রূপান্তর করা যায় সে সম্পর্কে কারও কি ধারণা আছে?



@ হ্যানফেইসুন আপনি যাকে " বাইনারি স্ট্রিং " বলছেন তা বাইটস অবজেক্ট ( স্ট্যান্ডার্ড লাইব্রেরিতে বাইটস অবজেক্ট সম্পর্কিত তথ্য দেখুন )
প্রিয়.বি. জেসুস

উত্তর:


356

এটি ডিকোড করুন।

>>> b'a string'.decode('ascii')
'a string'

স্ট্রিং থেকে বাইট পেতে, এটি এনকোড করুন।

>>> 'a string'.encode('ascii')
b'a string'

27
@lyomi, আমি ব্যবহার করেছি asciiকারণ প্রদত্ত স্ট্রিংটি এসকিআই অক্ষর দিয়ে তৈরি হয়েছিল। আপনি এনকোডিং যদি এনকোডিং নির্দিষ্ট প্রয়োজন হবে না utf-8(অনুযায়ী পাইথন 3.x এ ডিফল্ট str.encode, bytes.decodeডক-STRING)
falsetru

2
@lyomi ২০১ 2016 সালে (এবং এর প্রায় শেষ) লোকেরা এখনও এসকিআই ব্যবহার করে। অনেকগুলি 'লিগ্যাসি' পণ্য এবং সিস্টেম রয়েছে (স্পেসিফিকেশন সহ), তবে এমন একটিও কারণ রয়েছে যেখানে আপনি একটি 'বাইনারি স্ট্রিং' তৈরি করছেন যেখানে আপনি ইউনিকোড বা কিছু চান না এবং একাধিক বাইটগুলিকে 'মার্জ' করার চেষ্টা করতে চান না একটি একক চরিত্র। আমরা প্রায়শই ডিএনএস অনুরোধ ইত্যাদি করার জন্য বাইনারি ডেটা ধারণ করতে 'স্ট্রিংস' ব্যবহার করি
জমনস

আমি উত্তরটি সম্পূর্ণ করতে নিম্নলিখিত যুক্ত করার পরামর্শ দিই। বেশির ভাগ সময়ই আমরা ডিকোড প্রয়োজন যেমন কনসোল আউটপুট, সবচেয়ে pythonic উপায় আমি এটা কি পাওয়া যেমন, আমাদের অপারেটিং সিস্টেম থেকে বাইট import localeএবং তারপর os_encoding = locale.getpreferredencoding()। এইভাবে, আমরা ব্যবহার করে ডিকোড করতে পারিmy_b_string.decode(os_encoding)
aturegano

2
@ প্রক্যাগানো, এটি একমাত্র বিকল্প নয়। sys.getfilesystemencoding(), sys.stdin.encoding, sys.stdout.encoding। আইএমএইচও, সেই স্বয়ংক্রিয় এনকোডিং সনাক্তকরণ ব্যবহার করে সমস্যার সমাধান হতে পারে কারণ উপ-প্রোগ্রাম (ওপি সাবপ্রসেস ব্যবহার করছে) এনকোডিং নির্ধারণ করার জন্য (বা এমনকি হার্ড-কোডিং) অন্য কোনও উপায়ে রচনা করা যেতে পারে। মতামত, যাইহোক ধন্যবাদ।
ফলসেট্রু

@ ফালসেট্রু নোট করুন যে sys.getfilesystemencoding()ইউনিকোড ফাইলের নাম এবং বাইট ফাইলের নামগুলির মধ্যে রূপান্তর করতে ব্যবহৃত এনকোডিংয়ের নামটি দেয় এবং আপনি যে অপারেটিং সিস্টেমটি ব্যবহার করছেন তার উপর দৃ strongly়ভাবে নির্ভরশীল। আফাইক, এই ফাংশনটি সিস্টেমের পছন্দসই উপস্থাপনে রূপান্তর করতে ব্যবহৃত হয়। তার মানে এটি উল্লিখিত locale.getpreferredencoding()ফাংশনটি ব্যবহার করে প্রাপ্ত কনসোল দ্বারা ব্যবহৃত কোডিংটি অনুমান করবে না
অ্যাটারেগানো


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.