Control character — matnda ko‘rinadigan glifni ifodalashdan ko‘ra qurilma, terminal, formatlash yoki ma’lumot oqimini boshqarish uchun ajratilgan belgi. Newline, tab, carriage return va escape bunga tanish misollardir. Control characterlar tarixan teleprinter va terminal boshqaruvidan kelib chiqqan, ammo zamonaviy fayl formatlari, protokollar va dasturlash tillarida ham muhim rol o‘ynaydi.
ASCII boshqaruv sohasi
ASCII’da 0x00–0x1F va 0x7F control qiymatlaridir. NUL satr yoki buffer tugashini belgilashda, TAB gorizontal siljishda, LF yangi qatorga o‘tishda, CR esa carriage’ni qator boshiga qaytarishda ishlatilgan. ESC keyingi baytlar boshqaruv ketma-ketligi ekanini bildiradi. DEL qog‘oz lentadagi pozitsiyani bekor qilish tarixidan kelib chiqqan.
Unix matn qatori odatda LF bilan, klassik Windows esa CRLF bilan tugaydi. Git yoki compiler noto‘g‘ri line ending sabab faylning hamma qatori o‘zgargandek ko‘rsatishi mumkin. Tarmoq protokoli CRLF talab qilsa, faqat LF yuborish parser nomuvofiqligiga olib keladi. Format qoidasi platforma taxminiga emas, spetsifikatsiyaga asoslanadi.
Unicode va ko‘rinmas belgilar
Unicode ASCII control qiymatlarini saqlaydi va C1 control oralig‘ini ham belgilaydi. Bundan tashqari, format belgilar mavjud: zero-width joiner, bidirectional control va word joiner ekranda mustaqil glif bermaydi, lekin matn xulqini o‘zgartiradi. Ular texnik jihatdan barcha holatda “control character” kategoriyasiga kirmasa-da, ko‘rinmas boshqaruv vazifasi sabab birga muhokama qilinadi.
Combining mark ko‘rinmas bo‘lishi mumkin, ammo u control emas; oldingi belgiga diakritika qo‘shadi. Whitespace ham yagona toifa emas: space, non-breaking space, tab va newline turli semanticsga ega. Parser “ko‘rinmayapti” degan asosda ularni bir xil deb qabul qilmasligi kerak.
Escape va serializatsiya
Source code va JSON’da control belgilar ko‘pincha escape orqali yoziladi: \n, \t, \r yoki \u0000. JSON satrida U+0000–U+001F qiymatlari raw holda ruxsat etilmaydi. CSV’da newline quoted field ichida qonuniy bo‘lishi mumkin. Log formati qatorga asoslangan bo‘lsa, foydalanuvchi kiritgan newline soxta log yozuvi yaratmasligi uchun kodlanadi.
Terminalda ESC bilan boshlanuvchi ANSI ketma-ketlik rang, cursor va ekran holatini boshqaradi. Ishonchsiz matnni terminalga xom chiqarish rangni o‘zgartirish, havola ko‘rsatish yoki clipboard bilan bog‘liq xavfli ketma-ketlikni ishga tushirishi mumkin. Terminal log viewer control qiymatlarni olib tashlaydi yoki ko‘rinadigan escape shaklida beradi.
Validatsiya va xavfsizlik
HTTP header, filename, email va boshqa formatlar qaysi control qiymatlarga ruxsat berishini aniq belgilaydi. CR va LF’ni header qiymatiga qo‘shish response splitting yoki log injectionga olib kelishi mumkin. NUL byte bir qatlamda satr tugashi, boshqasida oddiy ma’lumot deb talqin qilinsa, extension yoki path tekshiruvi chetlab o‘tiladi.
Bidirectional control source kodning vizual tartibini o‘zgartirib, reviewer ko‘rayotgan mantiqni compilerdagi tartibdan farqlashi mumkin. Editor bunday belgilarni ko‘rsatadi, linter esa ruxsatsiz qo‘llanishni ogohlantiradi. Tozalash siyosati barcha control qiymatni ko‘r-ko‘rona o‘chirmaydi; protokol uchun qonuniy tab yoki newline kerak bo‘lishi mumkin.
Ko‘rinadigan diagnostika
Editor va hex viewer control qiymatni ^M, ␀, CRLF yoki hexadecimal kod bilan ko‘rsatishi mumkin. Bu oddiy bo‘shliq, tab va non-breaking space farqini topishda yordam beradi. Nusxa ko‘chirish vositasi ko‘rinmas belgini saqlab qolishi mumkinligi uchun muammo faqat renderdan baholanmaydi. Test fixture aynan bayt ketma-ketligini saqlaydi va versiya nazoratidagi line-ending conversion undan xabardor holda sozlanadi.
Bog‘liq tushunchalar
ASCII, Unicode, Escape sequence, Newline, Carriage return, Whitespace, Text encoding