سرمایه گذاری متفاوت در سال نو 🍎🌱 ۳۵٪ تخفیف نوروزی ➕ حضور رایگان در مسترمایند نخبگان صنعت نرم‌افزار 💻✅
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ ali
کد اسکی و نوع داده کارکتر
محسن موحد حل شده توسط محسن موحد

ما توی زبان‌های مثل Cpp برامون اعداد اسکی خیلی مهم بود می‌تونستیم باهاشون خیلی کار‌ها بکنیم . مثلا توی cast کردن داده‌ها حتی می‌تونست خودش رو نشون بده . خواستم ببینم ما اینجا نوع داده تک کارکتری نداریم ؟ یا اساس نمی‌تونیم با تابعی غیر از خود ascii و صرفا با تبدیل نوع داده مقدار عددی '2' یا 'a' یا ... هر چیز یا عمل دیگه رو به دست بیاریم ؟ 

ایا برعکس این عمل می‌تونه باشه ...؟ 
مثلا یکی از اعداد اسکی نقش بیپ داشت برای برنامه ! یعنی وقتی اون رو توی رشته میاوردیم یا اون رو پیرینت میکردیم آلارم ویندوز فعال می‌شد و صدا می‌داد . الان نمی‌تونیم مثلا فلان عدد اسکی رو دیگه توی پایتون پیرینت کنیم یا چیزی از این جنس ؟ 

 

پایتون هم امکانات زیادی برای کار با کدهای ASCII و کاراکترها داره، هرچند که روش کارش با C++ متفاوته.

توی پایتون، کاراکترها به صورت رشته‌های تک حرفی نمایش داده میشن. مثلاً 'a' رو در نظر بگیر، این در واقع یه رشته‌ هست که فقط یه حرف داره.

1. اگه بخوای کد ASCII مربوط به یه کاراکتر رو به دست بیاری، میتونی از تابع ord() استفاده کنی:

print(ord('2'))  # 50
print(ord('a'))  # 97

2. حاالا اگه بخوای از یه کد ASCII برگردی به کاراکتر، تابع chr() به کار میاد:

print(chr(50))  # '2'
print(chr(97))  # 'a'

3. مثلاً میتونی از کدهای ASCII برای انجام کارهای خاصی مثل تولید صدای بیپ استفاده کنی:

print('\a')  # این کد اگه سیستم پشتیبانی کنه، صدای بیپ تولید می‌کنه
RqL5Gfy51fdXezVq.png

یا برای استفاده از کاراکترهای کنترلی دیگه:

print('Hello\nWorld')  # \n برای رفتن به خط بعد
print('Tab\tSpace')    # \t برای ایجاد فاصله tab

4. حتی میتونی با کدهای ASCII عملیات ریاضی انجام بدی:

print(ord('b') - ord('a'))  # 1 (تفاوت بین 'a' و 'b')

5. میتونی با استفاده از همین ویژگی‌ها، اعداد رو به حروف الفبا تبدیل کنی:

for i in range(26):
   print(chr(ord('a') + i), end=' ')  # چاپ حروف الفبا

در نهایت، اگر چه پایتون مستقیماً نوع داده‌ خاصی به اسم "کاراکتر" نداره، اما با استفاده از توابع ord() و chr() و رشته‌های تک حرفی، میتونی همون کارهایی که با کاراکترها و کدهای ASCII توی C++ انجام میدادی رو اینجا هم انجام بدی.

نکته آخر:

کاراکترهای ASCII و کاراکترهای کنترلی (مثل تب یا newline) یه استاندارد جهانی هستن که هیچ وابستگی به یه زبان برنامه‌نویسی خاص ندارن. این کاراکترها در خود سیستم‌عامل تعریف شدن و همه زبان‌های برنامه‌نویسی از این استاندارد پیروی می‌کنن. به عنوان مثال، وقتی توی هر زبانی از \t برای تب یا \n برای رفتن به خط بعدی استفاده می‌کنی، در واقع داری از همون استانداردهای سیستم‌عامل بهره می‌بری. این باعث میشه که کار با این کاراکترها توی زبان‌های مختلف کاملاً یکسان باشه.

 

بخوام صحبتم رو کامل کنم، کامپیوترها همه چیز رو به شکل عدد میبینن. یعنی هر حرف، عدد، علامت، و حتی عکس و فیلم در نهایت به یه سری عدد تبدیل میشن. این اعداد توی حافظه کامپیوتر ذخیره و پردازش میشن.

حالا سوال اینجاست که هر عدد دقیقاً به چه حرف یا علامتی اشاره داره؟ خب در اینجا مشخصاً نیاز به یه استاندارد احساس میشه. برای همین استانداردهایی مثل ASCII و Unicode به وجود اومدن.

اما چرا اصلاً به استاندارد نیاز داریم؟

تصور کن دو کامپیوتر مختلف با دو سیستم‌عامل متفاوت بخوان یه فایل متنی رو باز کنن. اگه هر کدوم از این کامپیوترها از یه سیستم کدگذاری متفاوت استفاده کنن، ممکنه حروف و علائم به اشتباه نمایش داده بشن. یا مثلاً هر زبانی مجموعه حروف و علائم خاص خودش رو داره. یه سیستم کدگذاری باید بتونه همه این حروف و علائم رو درست پوشش بده. اینجاست که استانداردهایی مثل ASCII و Unicode کمک میکنن تا همه چیز سر جاش باشه و به درستی نمایش داده بشه.

بنابراین علت اینکه در فایل‌ها بعضاً پیش میاد که سیستم کدگذاری(Encoding) مشخص میشه مثل (UTF-8 Without BOM یا UTF-8 With BOM و ...) همین موارده.

بهترین پاسخ
محسن موحد ۰۵ شهریور ۱۴۰۳، ۱۴:۱۶