برنامه‌نویسی comma.code | computer| کاما کد|
2.68K subscribers
23 photos
64 videos
9 files
93 links
به ⭐️کانال کاما کد⭐️ خوش اومدی؛ جایی که کدها زنده میشن و ایدهها به واقعیت تبدیل میشدن! 🚀 چه تازهکار باشی و چه حرفه ای، اینجا کلی چیز منتظرته

حرفی سخنی انتقادی: @ir_379
Download Telegram
یه نکته که خیلی‌ها بهش فکر نمی‌کنن و ممکنه یه روز خیلی اذیت کنه:

هیچ‌وقت دو تا رشته رو بدون نرمال‌سازی یونیکد با هم مقایسه نکن.

فکر می‌کنی دو تا رشته که شکلشون یکیه، پس برابرن؟ نه همیشه. مثلاً حرف «é» رو در نظر بگیر. یه بار به صورت یک کاراکتر واحد نوشته می‌شه (U+00E9)، یه بار هم به صورت حرف «e» به علاوه یه اکسنت ترکیبی (U+0065 + U+0301). این دو تا تو نمایش یکسان به نظر می‌رسن، ولی تو حافظه فرق دارن. پس == می‌گه برابر نیستن.

این دقیقاً کجا دردسر می‌شه؟ جاهایی که کاربر اسم یا ایمیل وارد می‌کنه. یا وقتی فایل‌ها رو بر اساس اسم مقایسه می‌کنی. یا تو URLها. ممکنه کاربر نتونه لاگین کنه چون یه بار با کیبورد عربی نوشته و یه بار با کیبورد انگلیسی، یا از copy-paste استفاده کرده.

راه‌حلش ساده‌ست: قبل از مقایسه، نرمال‌سازی کن.

import unicodedata

s1 = unicodedata.normalize('NFC', s1)
s2 = unicodedata.normalize('NFC', s2)

if s1 == s2:
...


معمولاً NFC کافیه، ولی بسته به کاربرد ممکنه NFD یا NFKC یا NFKD هم لازم بشه. (NFKC برای چیزهایی مثل «fi» که به «fi» تبدیل می‌شه.)

فقط یه هشدار: نرمال‌سازی می‌تونه طول رشته رو عوض کنه. پس اگه بعدش می‌خوای index بزنی، حواست باشه.

این نکته تو پروژه‌های واقعی خیلی پیش میاد، مخصوصاً وقتی با کاربرای بین‌المللی طرف هستی.

@comma_code
@comma_code1

#python #programing #Comparison #comma_code #Normalization
#پایتون #برنامه‌نویسی #مقایسه #کاما_کد #نرمال‌سازی
❤2👍1🔥1