পাইথন স্ট্রিংয়ের ইউ উপসর্গটি কী?


232

এতে পছন্দ করুন:

u'Hello'

আমার অনুমান যে এটি "ইউনিকোড" নির্দেশ করে, এটি কি সঠিক?

যদি তা হয় তবে কখন থেকে পাওয়া যায়?

উত্তর:


147

আপনি ঠিক, 3.1.3 দেখুন। ইউনিকোড স্ট্রিংস

পাইথন ২.০ এর পরে এটি সিনট্যাক্স।

ডিফল্ট স্ট্রিংয়ের ধরনটি ইউনিকোড হওয়ায় পাইথন 3 এগুলি তাদেরকে রিডান্ট্যান্ট করে তুলেছে। সংস্করণ 3.0 এর মাধ্যমে 3.2 এগুলি সরিয়ে ফেলল, তবে পাইথন 2 এর সাথে সামঞ্জস্যের জন্য 2 থেকে 3 রূপান্তরকে সহায়তা করার জন্য এগুলি 3.3+পুনরায় যুক্ত করা হয়েছিল


6
একটি যুক্ত করা উচিত যে পাইথন 3 এ আর প্রয়োজন হয় না, তবে এখনও বৈধ বাক্য গঠন রয়েছে।
মার্টিন থোমা

মিশ্রন ইউনিকোড + + কাঁচা (Regex) স্ট্রিং (যেমন ur"string") পাইথন 2 বৈধ, কিন্তু এটা পাইথন 3 দুর্ভাগ্যবশত অবৈধ সিনট্যাক্স হল
cowlinator

123

মধ্যে তোমার দর্শন লগ করা u'Some String'মানে হল আপনার স্ট্রিং একটি হল ইউনিকোড স্ট্রিং

প্রশ্ন: আমি একটি ভয়ানক, ভয়াবহ তাড়াহুড়োয় আছি এবং আমি গুগল অনুসন্ধান থেকে এখানে পৌঁছেছি। আমি এই ডেটাটি কোনও ফাইলে লেখার চেষ্টা করছি, আমি একটি ত্রুটি পাচ্ছি এবং আমার দ্বিতীয় মৃত, সম্ভবত ত্রুটিযুক্ত, সমাধানটি প্রয়োজন।

উত্তর: আপনার সত্যিকার অর্থে জোেলের সম্পূর্ণ ন্যূনতম প্রতিটি সফ্টওয়্যার বিকাশকারী পড়তে হবে, ইউনিকোড এবং চরিত্রের সেটগুলি সম্পর্কে ইতিবাচকভাবে অবশ্যই জানতে হবে ( চরিত্রের সেটগুলিতে কোনও অজুহাত!) প্রবন্ধটি নয়।

প্রশ্ন: sry কোন সময় কোড pls

জরিমানা. চেষ্টা করুন str('Some String')বা 'Some String'.encode('ascii', 'ignore')। তবে আপনার ইউনিকোড স্ট্রিং রূপান্তরকরণ সম্পর্কিত কিছু উত্তর এবং আলোচনা এবং চরিত্রের এনকোডিংয়ের এই দুর্দান্ত, দুর্দান্ত, প্রাইমারটি পড়তে হবে ।


6
স্ট্রিংটিতে কেবল ASCII পাঠ্য থাকলে এটি কাজ করে । অন্যান্য সমস্ত ক্ষেত্রে আপনাকে স্পষ্টভাবে এনকোড করতে হবে।
মার্টিজন পিটারস

2
এটি আপনাকে '"পরিত্রাণ পেতে" কিছু হিসাবে বিবেচনা করে। এটি আমাকে বলে যে আপনি আসলে এটি কী তা বুঝতে পারছেন না। আপনি সাধারণত এটি "মুক্তি" পেতে চান না এবং ইউনিকোড স্ট্রিং থেকে বাইট স্ট্রিং তৈরির সঠিক উপায়টি সেই স্ট্রিংটিতে কী রয়েছে এবং কোন প্রসঙ্গে রয়েছে তার উপর নির্ভর করে।
লেনার্ট রেজেব্রো

2
@ লেনার্টরেজিব্রো সম্পূর্ণরূপে একমত হয়েছেন - এটি ছিল নিক্ষিপ্ত উত্তর যা গালে জিহ্বা বোঝানো হয়েছিল, তবে এটি এক ধরণের ভয়াবহ সংখ্যক উপবিষ্ট হয়েছিল। লোকদের সঠিক দিকে চালিত করার চেষ্টা করার জন্য সম্পাদিত।
অ্যান্ড্রু

1
পড়ার মজা ছিল! ধন্যবাদ! নিবন্ধটি 17 বছরের পুরানো এবং এটি এখনও সঠিক। কি দারুন.
কেরউইন স্নিজ্ডার্স

52

আমার অনুমান যে এটি "ইউনিকোড" নির্দেশ করে, এটি কি সঠিক?

হ্যাঁ.

যদি তা হয় তবে কখন থেকে পাওয়া যায়?

পাইথন 2.x.

পাইথন ৩.x এ স্ট্রিংগুলি ইউনিকোড ডিফল্টরূপে ব্যবহার করে এবং uউপসর্গের কোনও প্রয়োজন নেই । দ্রষ্টব্য: পাইথন 3.0.০-৩.২ তে ইউটি একটি সিনট্যাক্স ত্রুটি। পাইথন ৩.৩++ এ 2/3 সামঞ্জস্যপূর্ণ অ্যাপ্লিকেশন লেখার পক্ষে আরও সহজ করার পক্ষে এটি আবার আইনী।


4
uউপসর্গটি ব্যবহার করতে এটি পাইথন 3 এ এমনকি সিন্ট্যাক্স ত্রুটি ।
টিম পিটজ্যাকার

14
@ টিমপিটজেকার: কেবল 3.0.3.2 এ; ৩.৩++ এ এটি আইনী (এবং অর্থহীন), যাতে এটি আরও সহজ করে তুলতে 2.6 + / 3.3 + একক-কোডবেস লাইব্রেরি এবং অ্যাপ্লিকেশনগুলি।
abarnert

@ বার্নার্ট: আচ্ছা, সেই মন্তব্যটি এখন সাড়ে চার বছরের পুরনো :)
টিম পিটজ্যাকার

3
@ টিমপিটজেকার: অবশ্যই, তবে আপনার মন্তব্যটি যেমন 2010 সালে অনুসন্ধানের মাধ্যমে এই দরকারী উত্তরটি খুঁজে পেয়েছিল তাদের পক্ষে একটি দরকারী সংযোজন ছিল, আমি মনে করি 2014 সালে এটির সন্ধানের জন্য 3.3-র পরিবর্তনের উল্লেখ করা দরকারী। সম্ভবত যুক্তিযুক্তভাবে সম্পাদনা করা ভাল to উত্তর, তবে আমি মনে করি এটি একটি গৌণ বিন্দু যা বেশিরভাগ লোকের মধ্যে প্রবেশ করবে না (কারণ আপনি যদি ২০১৪ সালে এখনও ৩.৩-৩.২ ব্যবহার না করেন তবে "উপসর্গের প্রয়োজন নেই" আপনার জানা দরকার)
অবতারিত

আপনি যদি স্বেচ্ছাসেবক ব্যবহারকারীদের ডাউনলোড এবং চালানোর জন্য কোড লিখছেন এবং অনুমান না করে সর্বাধিক সম্ভাব্য কেসগুলি আবরণ করতে চান, তবে এটি 3.0-৩.২ ভাঙ্গা জেনে রাখা সহায়ক। কারণ আপনার six.text_type()এখনও সিদ্ধান্ত নিতে হবে যে আপনি এখনও (310) লোক ব্যবহার করে (আশাকরি ক্ষুদ্রতর) সংখ্যা ব্যবহারের জন্য যত্নশীল কিনা [[012] - অন্তত তথ্য রয়েছে যাতে আপনি চয়ন করতে পারেন।
ডোয়ান্ডারসন

3

আমি এখানে এসেছি কারণ আমার requestsআউটপুটটিতে মজার-চর-সিন্ড্রোম ছিল । আমি ভেবেছিলাম response.textআমাকে একটি সঠিকভাবে ডিকোডড স্ট্রিং দেবে, তবে আউটপুটে আমি মজাদার ডাবল-অক্ষরগুলি পেয়েছি যেখানে জার্মান উলামাটদের উচিত ছিল।

দেখা গেছে যে response.encodingকোনওভাবে খালি ছিল এবং সুতরাং responseকীভাবে সামগ্রীটিকে সঠিকভাবে ডিকোড করতে হবে এবং এএসসিআইআই হিসাবে বিবেচনা করা হয়নি (আমার ধারণা)।

আমার সমাধানটি ছিল 'রেসপন্স কনটেন্ট' সহ কাঁচা বাইটগুলি পেতে এবং decode('utf_8')এটিতে ম্যানুয়ালি প্রয়োগ করা। ফলাফলটি ছিল উমলাউতে।

সঠিকভাবে ডিকোড করা হয়েছে

পশম

বনাম। অযৌক্তিকভাবে ডিকোড করা

ফজরের


2

মানুষের জন্য ব্যবহৃত সমস্ত স্ট্রিংয়ের জন্য আপনাকে "" ব্যবহার করা উচিত।

আমি খুঁজে পেয়েছি যে পাইথন স্ট্রিংগুলির সাথে কাজ করার সময় নিম্নলিখিত মানসিকতাটি অনেক সহায়তা করে: সমস্ত পাইথন ম্যানিফেস্ট স্ট্রিংগুলি u""সিনট্যাক্স ব্যবহার করা উচিত । ""বাক্য গঠনটি কেবল বাইট অ্যারেগুলির জন্য।

বশ করা শুরু করার আগে, আমাকে ব্যাখ্যা করুন। বেশিরভাগ পাইথন প্রোগ্রাম ""স্ট্রিং ব্যবহার করে শুরু হয় । তবে তারপরে তাদের ইন্টারনেট থেকে ডকুমেন্টেশন সমর্থন করা দরকার, সুতরাং তারা ব্যবহার শুরু করে "".decodeএবং হঠাৎ করেই তারা এবং এই ডিকোডিংয়ের বিষয়ে সর্বত্র ব্যতিক্রম পাচ্ছে - সবগুলি ""স্ট্রিং ব্যবহারের কারণে । এই ক্ষেত্রে, ইউনিকোড একটি ভাইরাসের মতো কাজ করে এবং সর্বনাশ ডেকে আনবে।

তবে, আপনি যদি আমার নিয়ম অনুসরণ করেন তবে আপনার এই সংক্রমণ হবে না (কারণ আপনি ইতিমধ্যে সংক্রামিত হয়ে যাবেন)।


bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
কেনেটিএম

@ কেনিটিএম ভাল লাগছে! সহজভাবে বলতে চাইছিল মানুষের জন্য ব্যবহৃত সমস্ত স্ট্রিং ব্যবহার করা উচিত u""
ফ্রাঙ্ক ক্রুয়েজার

1
আপনি যদি ধর্মীয়ভাবে যেকোন জায়গায় ইউনিকোড ব্যবহার করতে চান - যা অনেকগুলি অ্যাপ্লিকেশনের জন্য (তবে সমস্ত নয়) একটি ভাল জিনিস — আপনি প্রায় অবশ্যই পাইথন ৩.x চান, ২.x নয়। এটি যখন লেখা হয়েছিল 2010 সালে এটি সত্য নাও হতে পারে তবে 2014 সালে, আপনাকে বেশিরভাগ লাইব্রেরি বা প্ল্যাটফর্মগুলি আপনাকে 3.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
অ্যালাস্টার ম্যাককর্ম্যাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.