آموزش پایتون - سیستم یونیکد
سیستم یونیکد چیست؟
نرمافزارها و برنامههای کاربردی اغلب نیاز دارند تا پیامها و خروجیهای خود را به زبانهای مختلفی مانند انگلیسی، فرانسوی، ژاپنی، عبری یا هندی نمایش دهند. نوع رشته در پایتون برای نمایش کاراکترها از استاندارد یونیکد استفاده میکند. این ویژگی امکان کار با تمامی کاراکترهای مختلف و ممکن را برای برنامه فراهم میسازد.
یک کاراکتر کوچکترین جزء ممکن از یک متن است. 'A'، 'B'، 'C' و غیره همگی کاراکترهای متفاوتی هستند. کاراکترهای '' و '' نیز همینطور هستند. یک رشته یونیکد، توالی و دنبالهای از نقطه کدها (Code Points) است که عددهایی از 0 تا 0x10FFFF (در مبنای دهدهی: 1,114,111) هستند. این توالی از نقطه کدها باید در حافظه به عنوان مجموعهای از واحدهای کد (Code Units) بازنمایی شوند و سپس این واحدهای کد به بایتهای 8 بیتی نگاشت میشوند.
کدگذاری کاراکترها (Character Encoding)
توالی نقطه کدها در حافظه به عنوان مجموعهای از واحدهای کد بازنمایی شده و به بایتهای 8 بیتی نگاشت میشود. به قوانین تبدیل یک رشته یونیکد به دنبالهای از بایتها، کدگذاری کاراکتر (Character Encoding) میگویند.
سه نوع کدگذاری وجود دارد: UTF-8، UTF-16 و UTF-32. عبارت UTF مخفف Unicode Transformation Format (قالب دگرگونی یونیکد) است.
پشتیبانی پایتون از یونیکد
پایتون از نسخه 3.0 به بعد دارای پشتیبانی توکار از یونیکد است. نوع داده str شامل کاراکترهای یونیکد است، بنابراین هر رشتهای که با استفاده از سینتکس کوتیشن تک، دوتا یا سهتایی ساخته شود، به صورت یونیکد ذخیره میشود. کدگذاری پیشفرض برای سورسکد پایتون UTF-8 است.
از این رو، یک رشته میتواند شامل مقدار مستقیم یک کاراکتر یونیکد (3/4) یا مقدار یونیکد آن (\u00BE) باشد.
مثال
var = "3/4"
print (var)
var = "\u00BE"
print (var)
کد بالا خروجی زیر را تولید خواهد کرد −
3/4
مثال
در مثال زیر، رشته '10' با استفاده از مقادیر یونیکد 1 و 0 ذخیره شده است که به ترتیب \u0031 و u0030 هستند.
var = "\u0031\u0030"
print (var)
این کد خروجی زیر را تولید خواهد کرد −
10
رشتهها متن را به قالبی قابل خواندن برای انسان نمایش میدهند و بایتها کاراکترها را به عنوان دادههای باینری (دودویی) ذخیره میکنند. کدگذاری (Encoding) دادهها را از یک رشته کاراکتری به سریای از بایتها تبدیل میکند. رمزگشایی (Decoding) بایتها را دوباره به کاراکترها و نمادهای قابل خواندن برای انسان ترجمه میکند. مهم است که
این دو روش را با هم اشتباه نگیرید. متد encode یک متد مربوط به رشته است، در حالی که decode متدی برای شیء بایت پایتون است.
مثال
در مثال زیر، متغیر رشتهای داریم که شامل کاراکترهای ASCII است. ASCII زیرمجموعهای از مجموعه کاراکترهای یونیکد است. از متد encode() برای تبدیل آن به یک شیء بایت استفاده میشود.
string = "Hello"
tobytes = string.encode('utf-8')
print (tobytes)
string = tobytes.decode('utf-8')
print (string)
متد decode() شیء بایت را دوباره به شیء str تبدیل میکند. روش کدگذاری استفاده شده utf-8 است.
b'Hello'
Hello
مثال
در مثال زیر، نماد روپیه (₹) با استفاده از مقدار یونیکد آن در متغیر ذخیره شده است. ما رشته را به بایت و دوباره به str تبدیل میکنیم.
string = "\u20B9"
print (string)
tobytes = string.encode('utf-8')
print (tobytes)
string = tobytes.decode('utf-8')
print (string)
وقتی کد بالا را اجرا میکنید، خروجی زیر را تولید خواهد کرد −
₹
b'\xe2\x82\xb9'
₹
پیشرفت مطالعه: وضعیت خواندهشدن این درس فقط در همین مرورگر ذخیره میشود؛ بدون نیاز به حساب کاربری.