برای پیداکردنِ نویسهٔ نامرئی،فقط شمارِ کاراکتر کافی نیست؛باید محلِ همان رخداد و کدِUnicodeآن را ببینیم. ابزارِ محلیِ این صفحه یک فهرستِ منتخب از نویسههای فاصله،اتصال و جهت را پیدا میکند و موقعیتِcodepoint،بایتِUTF-8وواحدِUTF-16را جدا گزارش میدهد. متن را پاک یا نرمال نمیکند و هر نویسهٔ پیداشده را خطا نمینامد.
نامرئی،همیشه بیمعنی یا صفرعرض نیست
نیمفاصلهٔU+200Cمیتواند برای نگارشِ فارسی لازم باشد؛NBSPیاU+00A0یک فاصلهٔ نشکن است و با فضایِ بدونِ عرض یکی نیست. نویسههای جهت هم ممکن است در متنِ دوطرفه کاربردِ عمدی داشته باشند. مستندِUnicodeمیانِ فاصلهٔ نمایانِ خالی و نویسههای default-ignorableدر نمایشِ پشتیبانینشده فرق میگذارد؛ظاهر را به حکمِ حذف تبدیل نمیکنیم.
این بازرس دقیقاً۲۰codepointِ اعلامی را میشناسد؛فهرستِ جامعِ همهٔ نویسههای نامرئی،WhitespaceیاDefault_Ignorableنیست. نام،categoryوbidi classاز پایگاهِUnicodeِ runtimeخوانده میشود. گرفتنِ bidi classبه معنیِ اجرایِ الگوریتمِ کاملِ جهتگذاری یا تشخیصِ جعل و تهدید نیست.
نمونهٔ اصیل چه چیزهایی دارد؟
رشتهٔ تمرین با یک ایموجی و «ا»ی دارای علامتِ ترکیبی آغاز میشود؛سپس واژهٔ «میرویم» با نیمفاصله،فاصلهٔ نشکن،ZWSP،یک جفتِ منتخبِ کنترلِ جهت،LRM،variation selectorِایموجی وWORD JOINERدارد. اینها از متنِ مشتری استخراج نشدهاند؛نویسنده رشته را برای دیدهشدنِ اختلافِ واحدها ساخته است.
خروجی هشت رخدادِ منتخب را بهترتیب گزارش میکند:U+200C،U+00A0،U+200B،U+2067،U+2069،U+200E،U+FE0FوU+2060. تعدادِ هشت،تعدادِ همهٔ فاصلهها یا همهٔ کاراکترهای نامرئیِ ممکن نیست. فایلِ نتیجه خودِ کنترلها را با notationِescapeنمایش میدهد تا گزارش،جهتِ متنِ خواننده را بیاعلان عوض نکند.
موقعیت را با واحد و مبنای صفر بخوانیم
همهٔ موقعیتها در این قرارداد از صفر شروع میشوند. برای اولین نیمفاصله،اندیسِcodepointبرابر۵و شروعِUTF-16برابر۶است؛ایموجیِ قبل از آن درUTF-16دو واحد دارد. بایتِUTF-8هم جدا از طولِ پیشوندِ واقعی حساب میشود. علامتِ ترکیبیِ ابتدای نمونه یکcodepointِجداست و از شمار حذف نشده است.
| خانهٔ گزارش | کاربرد | چیزی که نمیگوید |
|---|---|---|
| codepoint index | موقعیت در رشتهٔPython | ستونِ دیداریِ روی صفحه نیست |
| UTF-8 byte start | مرزِ بایت درencodeِدقیق | اندیسِحرف نیست |
| UTF-16 unit start | قراردادِ واحدِرشته درمحیطِمتناسب | تعدادِgraphemeنیست |
| name/category/bidi | ویژگیِ همانcodepoint | نیتِ نویسنده یا معنیِ جمله نیست |
دو رخدادِ یک کد را گم نکنیم
در آزمونِ جدا،دو نیمفاصله در اندیسهای۱و۳وجود دارند و هر دو ثبت میشوند. یک setاز کدها فقط میگوید U+200Cوجود دارد؛محلِ دوم را از دست میدهد. این بازرس برای هر رخداد ردیف میسازد و هشِUTF-8ِکلِ ورودی را نگه میدارد تا نسخهٔ متن معلوم بماند.
متنِ خالی و نمونهٔ دارای فاصلهٔ معمولی وnewlineهم آزموده شدهاند؛هیچ تطبیقی با فهرستِ منتخب نمیدهند. این به معنیِ «متن هیچ نویسهٔ فاصلهای ندارد» نیست. فهرستِ محدودِ ابزار را باید همراهِ نتیجه خواند. ورودی نیز رشتهٔUnicodeبا سقفِ محلیِ۴۰۹۶codepointاست؛surrogateِنامعتبرِUTF-8پذیرفته نمیشود.
اصلِ متن تغییر نمیکند
بایتِ متن پیش و پس از بازرسی برابر است. گزارش،نسخهٔPython۳٫۱۲٫۱۴وUCD۱۵٫۰٫۰را ثبت میکند. از صفحهٔ جدیدِUnicodeبرای معرفیِ مفهوم استفاده شده،اما runtimeرا نسخهٔ۱۸یا آزمونِ کاملِ انطباق نمینامیم. نامِ ویژگی باید با نسخهٔ دادهٔ همان اجرا تفسیر شود.
اگر نویسهای غیرمنتظره پیدا شد،ابتدا هدفِ متن و مسیرِ تولیدش را بررسی کنید. حذفِ خودکارِ همهٔکنترلها ممکن است شکلِ فارسی یا نمایشِ شناسهٔ لاتین را خراب کند. همچنین برابریِ ظاهریِ دو متن،مالکیتِ یک شناسه یا یکسانبودنِ معنایِ آنها را ثابت نمیکند؛این بازرس آن تصمیمها را انجام نمیدهد.
از تشخیصِ محل تا بررسیِ مسیر
شمارندهٔ طولِ فارسی عددِcodepointوUTF-8وواحدهای دیگر را میدهد؛این صفحه رخدادِ منتخب را با محل و نام پیدا میکند. اگر هدف مقایسهٔ تبدیلهاست،در NFCوNFKCپیش و پسِ تبدیل را جدا ببینید؛بازرسِ حاضر تبدیل انجام نمیدهد.
برای بررسیِ متنِ ورودی یا خروجی در چتِ اپرا،نمونهٔ مجاز و انتظارِ حفظِ متن را مطرح کنید. فایل فقط حافظهٔ محلی را میبیند و شبکه،اصلاحِ سند یا APIندارد؛وجودِ چنین بازرس یا سیاستِ حذف در محصول از این تمرین نتیجه نمیشود.
فایل تمرین و منبع
کدِ کاملِ محلیِ تمرین و کنترلهایش · دادهٔ اصیل و نتیجهٔ اجرای واقعی؛ نویسههای کنترلی escape شدهاند
- مستندِPython۳٫۱۲،name/category/bidirectionalوunidata_version؛نسخهٔ دادهٔ اجرا جدا ثبت شده است
- پرسشهای رسمیِUnicodeدربارهٔ نمایشِ فاصله وdefault-ignorableدر حالتِ پشتیبانینشده؛فقط بخشِ مرتبط مبناست
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.