পাইথনের একটি স্ট্রিং ASCII তে রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?


211

আমি যাচাই করতে চাই যে স্ট্রিং ASCII- এ আছে কিনা।

আমি সচেতন ord(), যদিও আমি চেষ্টা করার সময় ord('é'), আমার ছিল TypeError: ord() expected a character, but string of length 2 found। আমি বুঝতে পেরেছিলাম যে পাইথনটি যেভাবে তৈরি করেছি এর কারণেই (যেমনটি ord()এর ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে )।

চেক করার অন্য উপায় আছে?


পাইথন 2 এবং পাইথন 3 এর মধ্যে স্ট্রিং এনকোডিং বেশ কিছুটা পৃথক হয়, তাই আপনি কোন সংস্করণটি লক্ষ্য করছেন তা জেনে রাখা ভাল।
ফ্লোরিসা

উত্তর:


188
def is_ascii(s):
    return all(ord(c) < 128 for c in s)

95
নিরর্থকভাবে অদক্ষ। ভিনসেন্ট মার্কেটির পরামর্শ অনুসারে s.decode ('ascii') চেষ্টা করে ইউনিকোড ডেকোড এরির ধরার চেয়ে আরও অনেক ভাল।
ডিডিএ

20
এটি অদক্ষ নয়। সমস্ত () সংক্ষিপ্ত-সার্কিট হয়ে যাবে এবং এটি একটি অবৈধ বাইটের সাথে সাথেই মিথ্যা ফিরিয়ে দেবে।
জন মিলিকিন

10
অপর্যাপ্ত বা না, আরও পাইথোনিক পদ্ধতি হ'ল চেষ্টা / বাদে।
জেরেমি ক্যান্ট্রেল

43
চেষ্টা / বাদে তুলনায় এটি অদক্ষ। এখানে লুপটি ইন্টারপ্রেটারে রয়েছে। চেষ্টা করে / ফর্ম ব্যতীত, লুপটি strdecode ('ascii') দ্বারা ডাকা সি কোডেক বাস্তবায়নে রয়েছে। এবং আমি সম্মত, চেষ্টা / ফর্ম বাদে আরও পাইথোনিক।
ddaa

25
@ জনম্যাচিন ord(c) < 128অসীমভাবে বেশি পঠনযোগ্য এবং স্বজ্ঞাতc <= "\x7F"
স্লেটার ভিক্টোরফ

252

আমি মনে করি আপনি সঠিক প্রশ্ন জিজ্ঞাসা করছেন না -

পাইথনের একটি স্ট্রিংয়ের 'এসকিআই', ইউটিএফ -8, বা অন্য কোনও এনকোডিং সম্পর্কিত কোনও সম্পত্তি নেই। আপনার স্ট্রিংয়ের উত্স (আপনি এটি কোনও ফাইল থেকে পড়েছেন কিনা, কোনও কীবোর্ড থেকে ইনপুট ইত্যাদি) আপনার স্ট্রিং তৈরি করতে ascii তে একটি ইউনিকোড স্ট্রিং এনকোড করে থাকতে পারে, তবে সেখানে আপনাকে উত্তর দেওয়ার দরকার আছে।

সম্ভবত আপনি যে প্রশ্নটি জিজ্ঞাসা করতে পারেন তা হ'ল: "এই স্ট্রিংটি কি এসকিআই-তে কোনও ইউনিকোড স্ট্রিংকে এনকোড করার ফলস্বরূপ?" - এটির মাধ্যমে আপনি উত্তরটি দিতে পারেন:

try:
    mystring.decode('ascii')
except UnicodeDecodeError:
    print "it was not a ascii-encoded unicode string"
else:
    print "It may have been an ascii-encoded unicode string"

28
এনকোড ব্যবহার ভাল, কারণ পাইথন 3 তে স্ট্রিংয়ের কোনও ডিকোড পদ্ধতি নেই, দেখুন এনকোড / ডিকোডের মধ্যে পার্থক্য কী? (পাইথন ২.x)
জেট গুও

@ শ্রীঃ এটি কারণ আপনি এটিকে একটি আননকোডযুক্ত স্ট্রিং ( strপাইথন 2 এ, bytesপাইথন 3 এ) ব্যবহার করছেন।
dotancohen

পাইথন 2 এ, এই সমাধানটি কেবল একটি ইউনিকোড স্ট্রিংয়ের জন্য কাজ করে । যে strকোনও আইএসও এনকোডিং-এ প্রথমে ইউনিকোডে এনকোড করা দরকার। উত্তরটি এই মধ্যে যেতে হবে।
অ্যালেক্সিস

@JetGuo: আপনি উভয় ইনপুট ধরনের উপর নির্ভর করে ব্যবহার করা উচিত: s.decode('ascii') if isinstance(s, bytes) else s.encode('ascii')পাইথন মধ্যে 3. ওপি ইনপুট একটি bytestring হয় 'é'(পাইথন 2 বাক্য গঠন, পাইথন 3 সময়ে প্রকাশ করা হয়নি ছিল) এবং সেইজন্য .decode()সঠিক।
jfs

2
@ অ্যালেক্সিস: ভুল strপাইথন 2-এ একটি বাইস্টেরিং। .decode('ascii')সমস্ত বাইট আসকি পরিসরে আছে কিনা তা খুঁজে বের করার জন্য এটি ব্যবহার করা সঠিক ।
jfs

153

পাইথন 3 উপায়:

isascii = lambda s: len(s) == len(s.encode())

পরীক্ষা করতে, পরীক্ষার স্ট্রিংটি পাস করুন:

str1 = "♥O◘♦♥O◘♦"
str2 = "Python"

print(isascii(str1)) -> will return False
print(isascii(str2)) -> will return True

7
ইউনিকোড স্ট্রিংগুলিতে অ-অ্যাস্কি অক্ষর সনাক্ত করার জন্য এটি একটি দুর্দান্ত ছোট কৌশল, যা পাইথন 3-এ সমস্ত স্ট্রিং বেশ সুন্দর। যেহেতু ascii অক্ষর কেবল 1 বাইট ব্যবহার করে এনকোড করা যায়, তাই কোনও ascii অক্ষরের দৈর্ঘ্য বাইটগুলিতে এনকোড করার পরে তার আকারের সাথে সত্য হবে; অন্য অন্যান্য অ্যাস্কি অক্ষরগুলিকে 2 বাইট বা 3 বাইট অনুসারে এনকোড করা হবে যা তাদের আকার বাড়িয়ে তুলবে।
ডেভি

@ ফার দ্বারা সেরা উত্তর, তবে এমন নয় যে কিছু অক্ষর… এবং - এএসসিআইয়ের মতো দেখায়, তাই আপনি যদি ইংরেজী পাঠ্য সনাক্ত করতে এটি ব্যবহার করতে চান তবে পরীক্ষার আগে এই জাতীয়
অক্ষরগুলি

1
তবে পাইথন 2 এ এটি একটি ইউনিকোডএকনোডেরর ফেলে দেবে। পাই 2 এবং পাই 3 উভয়ের সমাধান খুঁজে পেয়েছি
আলভাস

2
যারা ল্যাম্বদা ব্যবহারের সাথে অপরিচিত তাদের জন্য (যেমনটি আমি প্রথম এই উত্তরটি দেখতে এসেছিলাম) isasciiএখন এমন একটি ফাংশন যা আপনি একটি স্ট্রিং পাস করেছেন: isascii('somestring')== Trueএবং isascii('àéç')==False
রাবিডাং

8
এটি কেবল সাধারণ অপব্যয়। এটি ইউটিএফ -8 এ একটি স্ট্রিং এনকোড করে, পুরো অন্যান্য বাইস্টেরিং তৈরি করে। সত্য পাইথন 3 উপায় হ'ল try: s.encode('ascii'); return True except UnicodeEncodeError: return False(উপরের মতো, তবে এনকোডিং যেমন স্ট্রিংগুলি পাইথন 3-তে ইউনিকোড)। এই উত্তরটি পাইথন 3 এ isascii('\uD800')False
ত্রুটিও

71

পাইথন ৩.7-এ নতুন ( বিপিপি 32677 )

স্ট্রিংগুলিতে আর ক্লান্তিকর / অদক্ষ ascii চেক করবে না, নতুন অন্তর্নির্মিত str/ bytes/ bytearrayপদ্ধতি - .isascii()স্ট্রিংগুলি আসকি কিনা তা পরীক্ষা করবে।

print("is this ascii?".isascii())
# True

এটি শীর্ষে থাকার যোগ্য!
সালেক

"\x03".isascii()সত্যও। ডকুমেন্টেশনটি কেবল এটি যাচাই করে যে সমস্ত অক্ষর কোড পয়েন্ট 128 (0-127) এর নীচে। আপনার কাছে নিয়ন্ত্রণ অক্ষরগুলি উপেক্ষা করতে চান, আপনি প্রয়োজন হবে: text.isascii() and text.isprintable()। কেবল isprintableনিজের দ্বারা ব্যবহার করাও যথেষ্ট নয়, কারণ এটি print জাতীয় (সঠিকভাবে) মুদ্রণযোগ্য হিসাবে বিবেচিত হবে, তবে এটি ascii মুদ্রণযোগ্য বিভাগের মধ্যে নেই, সুতরাং আপনার উভয়ই চাইলে আপনার দুটি পরীক্ষা করা দরকার। তবুও আরেকটি গোচা: স্পেসগুলি মুদ্রণযোগ্য হিসাবে বিবেচিত হয়, ট্যাব এবং নিউলাইনগুলি তা নয়।
লুক

19

ভবিষ্যতের রেফারেন্সের জন্য - সম্প্রতি এই জাতীয় কিছুতে ছড়িয়ে পড়ে

import chardet

encoding = chardet.detect(string)
if encoding['encoding'] == 'ascii':
    print 'string is in ascii'

যা আপনি এর সাথে ব্যবহার করতে পারেন:

string_ascii = string.decode(encoding['encoding']).encode('ascii')

7
অবশ্যই এর জন্য চারডেট লাইব্রেরি দরকার ।
স্ট্যাক এক্সচেঞ্জ স্যাডেন্সে

1
হ্যাঁ, যদিও বেশিরভাগ প্রতিষ্ঠানে চার্ডিট ডিফল্টরূপে উপলব্ধ
অ্যালভিন

7
চারডেট কেবলমাত্র এর মতো একটি নির্দিষ্ট সম্ভাবনার সাথে এনকোডিংটি অনুমান করে: {'confidence': 0.99, 'encoding': 'EUC-JP'}(যা এই ক্ষেত্রে সম্পূর্ণ ভুল ছিল)
সুজানা

19

ভিনসেন্ট মার্চেটির সঠিক ধারণা str.decodeরয়েছে তবে পাইথন ৩. এ তাকে অবহেলা করা হয়েছে Py পাইথন 3 এ আপনিও একই পরীক্ষা করতে পারেন str.encode:

try:
    mystring.encode('ascii')
except UnicodeEncodeError:
    pass  # string is not ascii
else:
    pass  # string is ascii

ব্যতিক্রম আপনার কাছে থেকে পরিবর্তিত হয়েছে ক্যাচ করতে চান দ্রষ্টব্য UnicodeDecodeErrorকরার UnicodeEncodeError


ওপির ইনপুটটি বাইস্টেরিং ( bytesপাইথন 3 টাইপ করুন যার কোনও .encode()পদ্ধতি নেই)। .decode()@ ভিনসেন্ট মার্কেটির উত্তর সঠিক
jfs

@ জেএফএসবেস্টিয়ান ওপি জিজ্ঞাসা করেছে "পাইথনের স্ট্রিং এএসসিআই তে আছে কিনা তা কীভাবে পরীক্ষা করবেন?" এবং বাইটস বনাম ইউনিকোড স্ট্রিং নির্দিষ্ট করে না। আপনি কেন বলছেন যে তার / তার ইনপুটটি বাইস্টেরিং?
drs

1
প্রশ্নের তারিখটি দেখুন: 'é'সেই সময়কার বাইট্রেসিং ছিল।
jfs

1
@ জেফাসেবাস্টিয়ান, ঠিক আছে, উত্তরের উত্তরটি বিবেচনা করে এই প্রশ্নের উত্তরটি যেমন আজ জিজ্ঞাসা করা হয়েছিল, আমি মনে করি এটি এখনও বৈধ এবং সহায়ক। কম এবং খুব কম লোক এখানে উত্তরগুলি সন্ধান করতে আসবে যেন তারা ২০০৮ সালে পাইথন চালাচ্ছিল
drs

2
আমি এই প্রশ্নটি খুঁজে পেয়েছি যখন আমি পাইথন 3 এর সমাধান খুঁজছিলাম এবং দ্রুত প্রশ্নটি পড়ে আমার সন্দেহ হয় নি যে এটি পাইথন 2 স্পেসিফিক। তবে এই উত্তরটি সত্যই সহায়ক ছিল - উজ্জীবিত!
জোশ

17

আপনার প্রশ্নটি ভুল; আপনি যে ত্রুটিটি দেখছেন তা অজগরটি কীভাবে তৈরি করেছিলেন তার ফলাফল নয়, বাইট স্ট্রিং এবং ইউনিকোড স্ট্রিংগুলির মধ্যে বিভ্রান্তির।

বাইট স্ট্রিং (যেমন "ফু", বা 'বার', পাইথন সিনট্যাক্সে) অক্টেটের ক্রম; 0-255 থেকে সংখ্যা। ইউনিকোড স্ট্রিং (যেমন u "foo" বা u'bar ') ইউনিকোড কোড পয়েন্টের ক্রম; 0-1112064 থেকে সংখ্যা। তবে আপনি the চরিত্রটিতে আগ্রহী বলে মনে হচ্ছে, যা (আপনার টার্মিনালে) একটি একক অক্ষরকে উপস্থাপন করে এমন একাধিক বাইট অনুক্রম।

পরিবর্তে ord(u'é'), এটি চেষ্টা করুন:

>>> [ord(x) for x in u'é']

এটি আপনাকে জানায় যে "é" কোড পয়েন্টগুলির কোন ক্রম প্রতিনিধিত্ব করে। এটি আপনাকে [233] দিতে পারে বা এটি আপনাকে [101, 770] দিতে পারে।

এটির chr()বিপরীত পরিবর্তে , এখানে রয়েছে unichr():

>>> unichr(233)
u'\xe9'

এই চরিত্রটি আসলে একক বা একাধিক ইউনিকোড "কোড পয়েন্ট" হিসাবে উপস্থাপিত হতে পারে, যা তারা নিজেরাই গ্রাফিক বা অক্ষরকে উপস্থাপন করে। এটি হয় "তীব্র উচ্চারণ সহ (ই, কোড পয়েন্ট 233)", বা "ই" (কোড পয়েন্ট 101), এর পরে "পূর্ববর্তী অক্ষরটিতে একটি তীব্র উচ্চারণ" (কোড পয়েন্ট 770) রয়েছে। সুতরাং এই একই চরিত্রটি পাইথন ডেটা স্ট্রাকচার u'e\u0301'বা হিসাবে উপস্থাপিত হতে পারে u'\u00e9'

বেশিরভাগ সময় আপনার এই বিষয়টির যত্ন নেওয়া উচিত নয়, তবে আপনি যদি কোনও ইউনিকোড স্ট্রিং দিয়ে পুনরাবৃত্তি করতে থাকেন তবে এটি ইস্যুতে পরিণত হতে পারে, কারণ পুনরাবৃত্তি কোড পয়েন্ট অনুসারে কাজ করে, সংক্ষেপণযোগ্য চরিত্র দ্বারা নয়। অন্য কথায়, len(u'e\u0301') == 2এবং len(u'\u00e9') == 1। যদি এটি আপনার কাছে গুরুত্বপূর্ণ হয় তবে আপনি রচনা এবং পচন ফর্মগুলির মধ্যে ব্যবহার করে রূপান্তর করতে পারেন unicodedata.normalize

ইউনিকোড গ্লোসারি এই কয়েকটি বিষয় বোঝার জন্য সহায়ক গাইড হতে পারে, প্রতিটি নির্দিষ্ট শব্দটি কীভাবে পাঠ্যের উপস্থাপনের একটি পৃথক অংশকে বোঝায়, যা অনেক প্রোগ্রামার বুঝতে পারে তার চেয়ে অনেক জটিল।


3
'é' অগত্যা একটি একক কোড পয়েন্ট উপস্থাপন করে না । এটি দুটি কোড পয়েন্ট হতে পারে (U + 0065 + U + 0301)।
jfs

2
প্রতিটি বিমূর্ত অক্ষর সর্বদা একটি কোড পয়েন্ট দ্বারা প্রতিনিধিত্ব করা হয়। তবে কোড পয়েন্টগুলি এনকোডিং স্কিমের উপর নির্ভর করে একাধিক বাইটে এনকোড করা যেতে পারে। অর্থাত্ 'é' হ'ল ইউটিএফ -8 এবং ইউটিএফ -16 এ দুটি বাইট, এবং ইউটিএফ -32-তে চার বাইট, তবে এটি প্রতিটি ক্ষেত্রে এখনও একটি একক কোড পয়েন্ট - ইউ + 00E9।
বেন ফাঁকা

5
@Ben ফাঁকা: U + এ 0065 এবং U + এ 0301 দ্বারা কোড পয়েন্ট এবং তারা কি করতে 'E' যা যা করতে পারেন প্রতিনিধিত্ব এছাড়াও ইউ + + 00E9 দ্বারা প্রতিনিধিত্ব করা। গুগল "তীব্র উচ্চারণের সংমিশ্রণ"।
jfs

জেএফ U + 0065 এবং U + 0301 একত্রিত করে 'é' গঠনের বিষয়ে ঠিক তবে এটি কোনও বিপরীত ফান্টিনো নয়। আপনি ইউ + 00E9 পাবেন। উইকিপিডিয়া অনুসারে , এই সম্মিলিত কোড পয়েন্টগুলি পিছনের সামঞ্জস্যের জন্য দরকারী
মার্টিন কনেকনি

1
@ থিহু - এটি এই বিপরীতে ফিরিয়ে আনতে পারে যে আপনি কোড পয়েন্টটিকে একই রচিত চরিত্রের প্রতিনিধিত্বকারী কোড পয়েন্টগুলির ক্রম হিসাবে পুনরায় সাধারণ করতে পারেন represent পাইথনে আপনি এটি এর মতো করতে পারেন: ইউনিকোডেডাটা.নরমালাইজ ('এনএফডি', আপনি '\ xe9')।
গ্লাইফ

10

এটা কিভাবে?

import string

def isAscii(s):
    for c in s:
        if c not in string.ascii_letters:
            return False
    return True

5
আপনার স্ট্রিংয়ে অক্ষর নয় এমন ASCII অক্ষর রয়েছে তবে এটি ব্যর্থ হয়। আপনার জন্য কোড কোড উদাহরণ রয়েছে, যার মধ্যে রয়েছে নিউলাইন, স্পেস, ডট, কমা, আন্ডারস্কোর এবং প্রথম বন্ধনী।
59

9

যার এনকোডিংয়ের বিষয়ে আমি নিশ্চিত নই (এবং কীভাবে পালাতে / সেই স্ট্রিংয়ে বিশেষ অক্ষরগুলি রূপান্তর করতে পারি) তার স্ট্রিংটি কীভাবে / এনকোড / ডিকোড করব তা নির্ধারণ করার চেষ্টা করার সময় আমি এই প্রশ্নটি পেয়েছি।

আমার প্রথম পদক্ষেপটি স্ট্রিংয়ের ধরণটি পরীক্ষা করা উচিত ছিল - আমি বুঝতে পারি না সেখানে টাইপ (গুলি) থেকে এর বিন্যাস সম্পর্কে আমি ভাল ডেটা পেতে পারি। এই উত্তরটি খুব সহায়ক ছিল এবং আমার সমস্যাগুলির আসল মূলটি পেয়েছিল।

আপনি যদি অভদ্র এবং অধ্যবসায়ী হন

ইউনিকোড ডিকোড এরর: 'এসকিআই' কোডেক বাইট 0xc3 263 পজিশনে ডিকোড করতে পারে না: সীমাবদ্ধ নয় (128)

বিশেষত যখন আপনি এনকোডিং করছেন, নিশ্চিত হয়ে নিন যে আপনি ইউনিকোড () এর স্ট্রিংটি ইতিমধ্যে ইউনিকোডের চেষ্টা করছেন না- কোনও ভয়াবহ কারণে, আপনি এসকিআই কোডেক ত্রুটি পেয়েছেন। ( পাইথন কিচেন রেসিপি এবং পাইথন ডক্সও দেখুন কতটা ভয়ঙ্কর হতে পারে তার আরও ভাল করে বোঝার জন্য টিউটোরিয়ালগুলিও )

শেষ পর্যন্ত আমি স্থির করেছিলাম যে আমি যা করতে চাই তা হ'ল:

escaped_string = unicode(original_string.encode('ascii','xmlcharrefreplace'))

ডিবাগিংয়ে সহায়ক আমার ফাইলটিতে ডিফল্ট কোডিংটি ইউটিএফ -8 এ সেট করা ছিল (এটি আপনার পাইথন ফাইলের শুরুতে রাখুন):

# -*- coding: utf-8 -*-

এটি আপনাকে তাদের ইউনিকোড পলায়ন (ইউ '\ xe0 \ xe9 \ xe7') ব্যবহার না করেই বিশেষ অক্ষর ('àéç') পরীক্ষা করতে দেয়।

>>> specials='àéç'
>>> specials.decode('latin-1').encode('ascii','xmlcharrefreplace')
'&#224;&#233;&#231;'

4

পাইথন 2.6 থেকে আলেকজান্ডার এর সমাধান উন্নত করার জন্য (এবং পাইথন 3.x নেই) আপনাকে ব্যবহার করতে পারেন সাহায্যকারী মডিউল curses.ascii এবং ব্যবহার curses.ascii.isascii () ফাংশন বা অন্যান্য বিভিন্ন: https://docs.python.org/2.6/ লাইব্রেরি / curses.ascii.html

from curses import ascii

def isascii(s):
    return all(ascii.isascii(c) for c in s)

3
এটি কাজ করে তবে সাবধান থাকুনcurses.ascii
jfs

2

আপনি নিয়মিত এক্সপ্রেশন লাইব্রেরি ব্যবহার করতে পারেন যা পিক্সিক মান [[: ASCII:]] সংজ্ঞা গ্রহণ করে।


2

strপাইথনের একটি স্টিং ( -প্রকার) বাইটের একটি সিরিজ। নেই কোন উপায় স্ট্রিং এ খুঁজছেন থেকে মাত্র বলার বাইটের এই সিরিজের কোন ascii স্ট্রিং, হল UTF-8 বা হল UTF-16 অথবা যাই হোক না কেন সাথে এনকোডেড ISO-8859-1- বা একটি স্ট্রিং মত একটি 8-বিট অক্ষরসেট মধ্যে একটি স্ট্রিং প্রতিনিধিত্ব কিনা ।

তবে আপনি যদি ব্যবহৃত এনকোডিংটি জানেন, তবে আপনি decodeস্ট্রকে একটি ইউনিকোড স্ট্রিং করতে পারেন এবং তারপরে আপনি যে পরিসীমা সম্পর্কে উদ্বিগ্ন তার বাইরে অক্ষর রয়েছে কিনা তা পরীক্ষা করতে একটি নিয়মিত এক্সপ্রেশন (বা একটি লুপ) ব্যবহার করতে পারেন।


1

ভালো লেগেছে @ RogerDahl এর উত্তর কিন্তু এটি শর্ট সার্কিট থেকে আরো দক্ষ চরিত্র শ্রেণী অস্বীকার এবং পরিবর্তে অনুসন্ধান ব্যবহার দ্বারা find_allবা match

>>> import re
>>> re.search('[^\x00-\x7F]', 'Did you catch that \x00?') is not None
False
>>> re.search('[^\x00-\x7F]', 'Did you catch that \xFF?') is not None
True

আমি কল্পনা করি একটি নিয়মিত অভিব্যক্তি এর জন্য ভালভাবে অনুকূলিত হয়েছে।


0
import re

def is_ascii(s):
    return bool(re.match(r'[\x00-\x7F]+$', s))

হওয়া ASCII যেমন একটি খালি স্ট্রিং অন্তর্ভুক্ত করার জন্য, পরিবর্তন +করার জন্য *


-1

আপনার কোডটি ক্রাশ থেকে রোধ করতে আপনি সম্ভবত একটি try-exceptক্যাপচার ব্যবহার করতে চানTypeErrors

>>> ord("¶")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found

উদাহরণ স্বরূপ

def is_ascii(s):
    try:
        return all(ord(c) < 128 for c in s)
    except TypeError:
        return False

এই tryমোড়ক পুরোপুরি অর্থহীন। যদি "¶"কোনও ইউনিকোড স্ট্রিং হয়, তবে ord("¶")এটি কাজ করবে এবং এটি (পাইথন 2) না হলে এটিকে for c in sবাইটগুলিতে বিভক্ত করবে তাই ordকাজ চালিয়ে যাবে।
রাই-

-5

আমি স্ট্রিংটি আসকি বা ইউনিকোড কিনা তা নির্ধারণ করতে নিম্নলিখিতটি ব্যবহার করি:

>> print 'test string'.__class__.__name__
str
>>> print u'test string'.__class__.__name__
unicode
>>> 

তারপরে ক্রিয়াকলাপটি সংজ্ঞায়িত করতে কেবল শর্তযুক্ত ব্লক ব্যবহার করুন:

def is_ascii(input):
    if input.__class__.__name__ == "str":
        return True
    return False

4
-1 আআরআরজিজিএইচটি সমস্ত অক্ষরকে অর্ড (সি) পরিসীমা (128, 256) এর সাথে ASCII হিসাবে আচরণ করছে !!!
জন মাচিন

কাজ করে না। নিম্নলিখিত কল করার চেষ্টা করুন: is_ascii(u'i am ascii')। যদিও অক্ষর এবং স্পেসগুলি অবশ্যই ASCII, এটি এখনও ফিরে আসে Falseকারণ আমরা স্ট্রিংটিকে বাধ্য করেছিলাম unicode
jpmc26
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.