یونیکد و رمزگذاری
چرا این بحث مهمه؟
- هر متنی که کامپیوتر ذخیره/منتقل میکنه، در نهایت بهصورت بایت هست
- برای تبدیل بین کاراکتر و بایت، به یک استاندارد رمزگذاری (Encoding) نیاز داریم
یونیکد (Unicode) چیست؟
- استانداردی که به هر کاراکتر (از هر زبانی — فارسی، انگلیسی، ایموجی و…) یک عدد یکتا (Code Point) اختصاص میده
- در پایتون ۳، رشتهها (
str) بهصورت پیشفرض یونیکد هستن
رمزگذاری (Encoding) چیست؟
- روش تبدیل کاراکتر یونیکد به دنبالهای از بایتها (برای ذخیره در فایل یا ارسال روی شبکه)
- رایجترین:
UTF-8
| encoding | ویژگی |
|---|---|
| UTF-8 | استاندارد، پشتیبانی از همه زبانها، حجم بهینه — پیشفرض پایتون |
| ASCII | فقط حروف انگلیسی و علائم پایه |
| UTF-16 / UTF-32 | فضای بیشتر، کمتر رایج در وب |
تبدیل بین str و bytes
خطای رایج: UnicodeDecodeError
- وقتی بایتهایی رو با encoding اشتباه بخوایم decode کنیم
UnicodeDecodeError: 'ascii' codec can't decode byte...
نکته مهم: خواندن فایل با encoding درست
- اگه فایل با UTF-8 ذخیره شده ولی با encoding اشتباه باز بشه، متن بههم میریزه
نکته: اگه هنگام باز کردن فایل متنی، محتوا بهصورت کاراکترهای عجیب یا خطا نمایش داده شد، اولین چیزی که باید چک کرد encoding فایله
نکته: UnicodeEncodeError
- برعکس حالت قبل، وقتی بخوایم رشتهای رو با یک encoding محدود ذخیره کنیم که پشتیبانی نمیکنه
UnicodeEncodeError: 'ascii' codec can't encode characters...