JavaRush /Java blogi /Random-UZ /Matnni kodlash ASCII (Windows 1251, CP866, KOI8-R) va Uni...
articles
Daraja

Matnni kodlash ASCII (Windows 1251, CP866, KOI8-R) va Unicode (UTF 8, 16, 32) - krakerlar bilan muammoni qanday hal qilish mumkin

Guruhda nashr etilgan
Bugun biz veb-saytda va dasturlarda krakozyabrlar qaerdan kelib chiqqanligi, qanday matn kodlari mavjudligi va qaysi biri ishlatilishi kerakligi haqida gaplashamiz. Keling, asosiy ASCII-dan boshlab, shuningdek, uning kengaytirilgan CP866, KOI8-R, Windows 1251 versiyalari va zamonaviy Unicode konsorsium kodlashlari UTF 16 va 8 bilan yakunlangan ularning rivojlanish tarixini batafsil ko'rib chiqaylik. Matnni kodlash ASCII (Windows 1251, CP866, KOI8-R) va Unicode (UTF 8, 16, 32) - krakerlar bilan muammoni qanday hal qilish kerak - 1Mundarija: Ba'zilar uchun bu ma'lumot keraksiz bo'lib tuyulishi mumkin, lekin bilasizmi, men sudralib yuruvchi krakozyabrlar (o'qib bo'lmaydigan belgilar to'plami) bo'yicha qancha savollar olaman. Endi men barchani ushbu maqola matniga havola qilish va o'z xatolarimni topish imkoniyatiga ega bo'laman. Xo'sh, ma'lumotni o'zlashtirishga tayyor bo'ling va hikoya oqimini kuzatishga harakat qiling.

ASCII - lotin alifbosi uchun asosiy matn kodlash

Matnni kodlashning rivojlanishi IT-industriyasining shakllanishi bilan bir vaqtda sodir bo'ldi va shu vaqt ichida ular juda ko'p o'zgarishlarga duch kelishdi. Tarixiy jihatdan hammasi EBCDIC bilan boshlangan, bu ruscha talaffuzda juda nomutanosib edi, bu lotin alifbosi harflarini, arab raqamlarini va tinish belgilarini nazorat belgilar bilan kodlash imkonini berdi. Ammo shunga qaramay, zamonaviy matn kodlarini ishlab chiqishning boshlang'ich nuqtasi mashhur ASCII (Amerika standart axborot almashinuvi kodeksi, rus tilida odatda "so'rash" deb talaffuz qilinadi) hisoblanadi . Unda ingliz tilida so'zlashuvchi foydalanuvchilar tomonidan eng ko'p qo'llaniladigan birinchi 128 ta belgi - lotin harflari, arab raqamlari va tinish belgilari tasvirlangan. ASCII-da tasvirlangan ushbu 128 ta belgi, shuningdek, qavslar, xesh belgilari, yulduzchalar va boshqalar kabi ba'zi xizmat belgilarini o'z ichiga oladi. Aslida, siz ularni o'zingiz ko'rishingiz mumkin: Matnni kodlash ASCII (Windows 1251, CP866, KOI8-R) va Unicode (UTF 8, 16, 32) - krakerlar bilan muammoni qanday hal qilish kerak - 2ASCII ning asl versiyasidan mana shu 128 ta belgi standart bo'lib qoldi va boshqa har qanday kodlashda siz ularni aniq topasiz va ular shu tartibda paydo bo'ladi. Ammo haqiqat shundaki, bir bayt ma'lumot yordamida siz 128 emas, balki 256 ta turli xil qiymatlarni kodlashingiz mumkin (ikkita sakkizning kuchi 256 ga teng), shuning uchun Asuka-ning asosiy versiyasidan keyin butun Kengaytirilgan ASCII kodlashlar seriyasi paydo bo'ldi , unda 128 ta asosiy belgilarga qo'shimcha ravishda milliy kodlash belgilar (masalan, rus) yordamida ham kodlash mumkin edi. Bu erda, ehtimol, tavsifda ishlatiladigan raqam tizimlari haqida bir oz ko'proq gapirishga arziydi. Birinchidan, barchangizga ma'lumki, kompyuter faqat ikkilik tizimdagi raqamlar bilan ishlaydi, ya'ni nollar va birlar bilan ishlaydi ("Boolean algebra", agar kimdir uni institut yoki maktabda olgan bo'lsa). Bitta bayt sakkiz bitdan iborat bo‘lib, ularning har biri noldan boshlab ikkitadan ikkiga qadar va yettinchigacha bo‘lgan ikkitani ifodalaydi: Matnni kodlash ASCII (Windows 1251, CP866, KOI8-R) va Unicode (UTF 8, 16, 32) - krakerlar bilan muammoni qanday hal qilish kerak - 3 Bunday konstruksiyadagi barcha mumkin bo‘lgan nol va birlik birikmalari bo‘lishi mumkinligini tushunish qiyin emas. faqat 256 bo'lsin. Ikkilik tizimdan o'nlik songa aylantirish juda oddiy. Siz faqat ikkitasining barcha kuchlarini ularning ustidagi kuchlarni qo'shishingiz kerak. Bizning misolimizda bu 1 (nolning kuchiga 2) plyus 8 (ikki 3 darajaga), ortiqcha 32 (ikki beshinchi daraja), ortiqcha 64 (oltinchi darajaga), ortiqcha 128 bo'lib chiqadi. (ettinchi kuchga). Jami o'nli tizimda 233 ga teng. Ko'rib turganingizdek, hamma narsa juda oddiy. Ammo agar siz ASCII belgilar bilan jadvalga diqqat bilan qarasangiz, ular o'n oltilik kodlashda ifodalanganligini ko'rasiz. Masalan, "yulduzcha" Askidagi 2A o'n oltilik soniga mos keladi. O‘n oltilik sanoq sistemasida arab raqamlaridan tashqari A (o‘n) dan F (o‘n besh)gacha bo‘lgan lotin harflari ham qo‘llanilishini bilsangiz kerak. Xo'sh, ikkilik sonni o'n oltilik raqamga aylantirish uchunquyidagi oddiy usulga murojaat qiling. Axborotning har bir bayti to'rt bitdan iborat ikki qismga bo'linadi. Bular. Har bir yarim baytda faqat o'n oltita qiymatni (ikkidan to'rtinchi darajagacha) ikkilik tizimda kodlash mumkin, ularni o'n oltilik raqam sifatida osongina ko'rsatish mumkin. Bundan tashqari, baytning chap yarmida darajalarni skrinshotda ko'rsatilganidek emas, balki noldan boshlab qayta hisoblash kerak bo'ladi. Natijada, biz E9 raqami skrinshotda kodlanganligini olamiz. Umid qilamanki, mening mulohaza yuritish jarayonim va bu jumboqning yechimi siz uchun aniq bo'ldi. Xo'sh, endi matnni kodlash haqida gapirishni davom ettiramiz.

Asuka-ning kengaytirilgan versiyalari - CP866 va KOI8-R kodlashlari psevdografika bilan

Shunday qilib, biz ASCII haqida gapira boshladik, bu barcha zamonaviy kodlashlarni (Windows 1251, Unicode, UTF 8) ishlab chiqish uchun boshlang'ich nuqta edi. Dastlab u lotin alifbosining atigi 128 ta belgisini, arab raqamlarini va boshqa narsalarni o'z ichiga olgan, ammo kengaytirilgan versiyada ma'lumotlarning bir baytida kodlanishi mumkin bo'lgan barcha 256 qiymatdan foydalanish mumkin bo'ldi. Bular. Askiga o'z tilingiz harflarining belgilarini qo'shish mumkin bo'ldi. Bu erda biz matn kodlash nima uchun umuman zarurligini va nima uchun bu juda muhimligini tushuntirish uchun yana bir bor chetlanishimiz kerak . Sizning kompyuteringiz ekranidagi belgilar ikki narsaga asoslanadi - turli xil belgilarning vektor shakllari to'plami (namoyishlari) (ular kompyuteringizda o'rnatilgan shriftlari bo'lgan fayllarda) va aynan shu narsani tortib olishga imkon beruvchi kod. ushbu vektor shakllari to'plamidan (shrift fayli) to'g'ri joyga kiritilishi kerak bo'lgan belgi. Shriftlarning o'zi vektor shakllari uchun javobgar ekanligi aniq, lekin operatsion tizim va unda ishlatiladigan dasturlar kodlash uchun javobgardir. Bular. kompyuteringizdagi har qanday matn baytlar to'plami bo'ladi, ularning har biri aynan shu matnning bitta belgisini kodlaydi. Ushbu matnni ekranda ko'rsatadigan dastur (matn muharriri, brauzer va boshqalar) kodni tahlil qilishda keyingi belgining kodlanishini o'qiydi va uni ko'rsatish uchun ulangan kerakli shrift faylida tegishli vektor shaklini qidiradi. matnli hujjat. Hamma narsa oddiy va oddiy. Bu shuni anglatadiki, bizga kerak bo'lgan har qanday belgini (masalan, milliy alifbodan) kodlash uchun ikkita shart bajarilishi kerak: bu belgining vektor shakli ishlatiladigan shriftda bo'lishi kerak va bu belgi kengaytirilgan ASCII kodlashlarida kodlanishi mumkin. bir baytda. Shuning uchun bunday variantlarning to'liq to'plami mavjud. Faqat rus tilidagi belgilarni kodlash uchun kengaytirilgan Askaning bir nechta turlari mavjud. Masalan, CP866 dastlab paydo bo'ldi , u rus alifbosidagi belgilarni ishlatish qobiliyatiga ega edi va bu ASCII ning kengaytirilgan versiyasi edi. Ya'ni, uning yuqori qismi yuqoridagi skrinshotda ko'rsatilgan Aska-ning asosiy versiyasiga (128 lotincha harflar, raqamlar va boshqa axlatlar) to'liq mos keldi, ammo jadvalning CP866 kodli pastki qismida ko'rsatilgan ko'rinish bor edi. Quyidagi skrinshot va yana 128 ta belgini kodlashga ruxsat berilgan (ruscha harflar va barcha turdagi psevdografiklar): Matnni kodlash ASCII (Windows 1251, CP866, KOI8-R) va Unicode (UTF 8, 16, 32) - krakerlar bilan muammoni qanday hal qilish kerak - 4 Ko'ryapsizmi, o'ng ustunda raqamlar 8 dan boshlanadi, chunki 0 dan 7 gacha bo'lgan raqamlar ASCII ning asosiy qismiga ishora qiladi (birinchi skrinshotga qarang). Shunday qilib, CP866-dagi kirill alifbosidagi "M" harfi 9C kodiga ega bo'ladi (u o'n oltilik sanoq tizimidagi 9 bilan mos keladigan chiziq va C raqami bilan ustunning kesishmasida joylashgan), uni bir bayt ma'lumotda yozish mumkin. , va agar ruscha belgilar bilan mos keladigan shrift mavjud bo'lsa, bu harf hech qanday muammosiz matnda paydo bo'ladi. Bu miqdor qayerdan kelgan?CP866 da psevdografiya ? Gap shundaki, ruscha matn uchun ushbu kodlash grafik operatsion tizimlar hozirgidek keng tarqalmagan o'sha shaggy yillarda ishlab chiqilgan. Va Dosa va shunga o'xshash matnli operatsion tizimlarda psevdografiya hech bo'lmaganda matnlarning dizaynini diversifikatsiya qilishga imkon berdi va shuning uchun CP866 va uning boshqa barcha tengdoshlari Asuka-ning kengaytirilgan versiyalari toifasidan juda ko'p. CP866 IBM tomonidan tarqatilgan, ammo bunga qo'shimcha ravishda rus tilidagi belgilar uchun bir qator kodlashlar ishlab chiqilgan, masalan, KOI8-R bir xil turga (kengaytirilgan ASCII) tegishli bo'lishi mumkin : Matnni kodlash ASCII (Windows 1251, CP866, KOI8-R) va Unicode (UTF 8, 16, 32) - krakerlar bilan muammoni qanday hal qilish kerak - 5Uning ishlash printsipi bir xil bo'lib qoladi CP866 biroz oldinroq tasvirlangan - matnning har bir belgisi bitta bayt sifatida kodlangan. Skrinshotda KOI8-R jadvalining ikkinchi yarmi ko'rsatilgan, chunki birinchi yarmi ushbu maqoladagi birinchi skrinshotda ko'rsatilgan asosiy Asuka bilan to'liq mos keladi. KOI8-R kodlash xususiyatlaridan shuni ta'kidlash mumkinki, uning jadvalidagi kirill harflari CP866da bo'lgani kabi alifbo tartibida emas. Agar siz birinchi skrinshotga (barcha kengaytirilgan kodlashlarga kiritilgan asosiy qism) qarasangiz, KOI8-R ruscha harflar lotin alifbosining mos keladigan harflari bilan jadvalning bir xil kataklarida joylashganligini ko'rasiz. jadvalning birinchi qismidan. Bu faqat bitta bitni (ikkidan ettinchi darajagacha yoki 128) tashlab, rus tilidan lotin belgilariga o'tish qulayligi uchun qilingan.

Windows 1251 - ASCII ning zamonaviy versiyasi va nima uchun yoriqlar paydo bo'ladi

Matnni kodlashning keyingi rivojlanishi grafik operatsion tizimlarning ommalashib borayotganligi va ularda psevdografiyadan foydalanish zarurati vaqt o'tishi bilan yo'qolganligi bilan bog'liq edi. Natijada, Asuka ning hali ham kengaytirilgan versiyalari (matnning bir belgisi faqat bir bayt ma'lumot bilan kodlangan), ammo psevdografik belgilardan foydalanmasdan butun bir guruh paydo bo'ldi. Ular Amerika Standartlar Instituti tomonidan ishlab chiqilgan ANSI kodlashlariga tegishli edi. Oddiy tilda, rus tilini qo'llab-quvvatlaydigan versiya uchun kirill nomi ham ishlatilgan. Bunga misol Windows 1251 bo'ladi . U ilgari qo'llanilgan CP866 va KOI8-R dan ijobiy farq qilar edi, chunki undagi psevdografik belgilar o'rnini rus tipografiyasining etishmayotgan belgilari (aksent belgisidan tashqari), shuningdek, yaqin slavyan tillarida ishlatiladigan belgilar egallagan. Rus (Ukrain, Belorus va boshqalar). ): Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 6Rus tilidagi kodlashlarning juda ko'pligi tufayli shrift ishlab chiqaruvchilari va dasturiy ta'minot ishlab chiqaruvchilari doimo bosh og'rig'iga duch kelishdi va siz va men, aziz o'quvchilar, ko'pincha o'sha mashhur xatolar bilan muammoga duch kelamiz. matnda ishlatilgan versiya bilan chalkashlik yuzaga kelganda. Ko'pincha ular elektron pochta orqali xabarlarni jo'natish va qabul qilishda paydo bo'ldi, bu juda murakkab konvertatsiya jadvallarini yaratishga olib keldi, bu esa aslida bu muammoni tubdan hal qila olmadi va ko'pincha foydalanuvchilar yozishmalar uchun lotin harflarining transliteratsiyasidan foydalanganlar. CP866, KOI8-R yoki Windows 1251 kabi rus tilidagi kodlashlardan foydalanganda mashhur bo'lmagan gaplardan qoching. Aslida, ruscha matn o'rniga paydo bo'lgan yoriqlar ma'lum bir tilning kodlashidan noto'g'ri foydalanish natijasi bo'lib, u quyidagi tildagi kodga mos kelmaydi. matnli xabar dastlab kodlangan edi. Aytaylik, agar siz Windows 1251 kodlar jadvalidan foydalangan holda CP866 yordamida kodlangan belgilarni ko'rsatishga harakat qilsangiz, xabar matnini to'liq almashtirib, xuddi shu ma'nosiz (ma'nosiz belgilar to'plami) chiqadi. Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 7Shunga o'xshash vaziyat ko'pincha veb-saytlar, forumlar yoki bloglarni yaratish va sozlashda, ruscha harflar bilan matn noto'g'ri saytda sukut bo'yicha ishlatiladigan noto'g'ri kodlashda yoki noto'g'ri matn muharririda saqlanganida paydo bo'ladi. yalang'och ko'z bilan kodga. Oxir-oqibat, ko'p odamlar bu vaziyatdan juda ko'p kodlashlar va doimiy ravishda ahmoqona narsalar bilan charchadilar va barcha mavjudlarini almashtiradigan va o'qilmaydigan matnlarning paydo bo'lishi bilan bog'liq muammoni hal qiladigan yangi universal variatsiyani yaratish uchun zarur shart-sharoitlar paydo bo'ldi. . Bundan tashqari, xitoy tili kabi tillar muammosi mavjud edi, bu erda 256 tadan ko'ra ko'proq til belgilari mavjud edi.

Unicode - universal kodlash UTF 8, 16 va 32

Janubi-Sharqiy Osiyo tillari guruhining minglab belgilarini ASCII ning kengaytirilgan versiyalarida belgilarni kodlash uchun ajratilgan ma'lumotlarning bir baytida tasvirlab bo'lmaydi. Natijada, universal matn kodlashning paydo bo'lishidan manfaatdor bo'lgan ko'plab IT-sanoat rahbarlari (dasturiy ta'minot ishlab chiqaruvchi, texnik vositalarni kodlovchi, shrift yaratuvchilar) hamkorligida Unicode (Unicode Consortium) deb nomlangan konsorsium yaratildi. Unicode konsortsiumi homiyligida chiqarilgan birinchi variatsiya UTF 32 edi . Kodlash nomidagi raqam bitta belgini kodlash uchun ishlatiladigan bitlar sonini bildiradi. 32 bit yangi universal UTF kodlashda bitta belgini kodlash uchun zarur bo'lgan 4 bayt ma'lumotga teng. Natijada, ASCII ning kengaytirilgan versiyasida va UTF-32 da kodlangan matnli bir xil fayl, ikkinchi holda, to'rt baravar kattaroq hajmga (vaznga) ega bo'ladi. Bu yomon, lekin endi biz UTF yordamida ikkitadan o'ttiz soniyagacha bo'lgan bir qator belgilarni kodlash imkoniyatiga egamiz ( milliardlab belgilar , ular har qanday haqiqatan ham kerakli qiymatni ulkan chegara bilan qoplaydi). Ammo Evropa guruhi tillariga ega bo'lgan ko'plab mamlakatlar kodlashda bunday katta miqdordagi belgilarni umuman ishlatishga hojat yo'q edi, ammo UTF-32 dan foydalanganda ular hech qanday sababsiz matnli hujjatlarning og'irligini to'rt baravar oshirdilar, va buning natijasida Internet-trafik hajmi va saqlangan ma'lumotlar hajmi oshadi. Bu juda ko'p va hech kim bunday chiqindilarni ko'tara olmaydi. Unicode-ning rivojlanishi natijasida UTF-16 paydo bo'ldi , u shu qadar muvaffaqiyatli bo'ldiki, u sukut bo'yicha biz foydalanadigan barcha belgilar uchun asosiy maydon sifatida qabul qilindi. Bitta belgini kodlash uchun u ikki baytdan foydalanadi. Keling, bu narsa qanday ko'rinishini ko'rib chiqaylik. Windows operatsion tizimida siz "Ishga tushirish" - "Dasturlar" - "Aksessuarlar" - "Tizim asboblari" - "Belgilar jadvali" yo'liga o'tishingiz mumkin. Natijada, tizimingizda o'rnatilgan barcha shriftlarning vektor shakllari bilan jadval ochiladi. Agar siz "Kengaytirilgan variantlar" da Unicode belgilar to'plamini tanlasangiz, har bir shrift uchun unga kiritilgan belgilarning butun doirasini alohida ko'rishingiz mumkin bo'ladi. Aytgancha, ulardan birini bosish orqali siz uning ikki baytli kodini UTF-16 formatida ko'rishingiz mumkin , to'rtta o'n oltilik raqamdan iborat: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 8UTF-16 da 16 bit yordamida nechta belgini kodlash mumkin? 65,536 (ikki o'n olti darajagacha) va bu Unicode-da asosiy maydon sifatida qabul qilingan raqam. Bundan tashqari, uni ishlatib, taxminan ikki million belgini kodlash usullari mavjud, ammo ular bir million belgidan iborat kengaytirilgan bo'sh joy bilan cheklangan. Ammo Unicode kodlashning ushbu muvaffaqiyatli versiyasi ham, aytaylik, dasturlarni faqat ingliz tilida yozganlarni unchalik mamnun qilmadi, chunki ASCII ning kengaytirilgan versiyasidan UTF-16 ga o'tgandan so'ng, hujjatlarning og'irligi ikki baravar oshdi (har biriga bir bayt). Askidagi belgi va YUTF-16 da bir xil belgi uchun ikki bayt). Unicode konsorsiumidagi hamma va hamma narsani qondirish uchun o'zgaruvchan uzunlikdagi kodlashni o'ylab topishga qaror qilindi . U UTF-8 deb nomlangan. Nomidagi sakkiztasiga qaramasdan, u aslida o'zgaruvchan uzunlikka ega, ya'ni. Matnning har bir belgisi uzunligi bir dan olti baytgacha bo'lgan ketma-ketlikda kodlanishi mumkin. Amalda, UTF-8 faqat bir baytdan to'rt baytgacha bo'lgan diapazondan foydalanadi, chunki to'rt bayt koddan tashqari hech narsani nazariy jihatdan tasavvur qilish ham mumkin emas. Undagi barcha lotin belgilar eski ASCIIda bo'lgani kabi bir baytga kodlangan. Shunisi e'tiborga loyiqki, faqat lotin alifbosini kodlashda, hatto Unicode-ni tushunmaydigan dasturlar ham YTF-8-da kodlangan narsalarni o'qiydi. Ya'ni, Asuka-ning asosiy qismi shunchaki Unicode konsorsiumining ushbu miyasiga o'tkazildi. UTF-8 dagi kirillcha belgilar ikki baytda, masalan, gruzincha belgilar uch baytda kodlangan. Unicode konsortsiumi, UTF 16 va 8-ni yaratgandan so'ng, asosiy muammoni hal qildi - endi bizning shriftlarimizda bitta kod maydoni mavjud . Va endi ularning ishlab chiqaruvchilari faqat kuchli va imkoniyatlaridan kelib chiqqan holda matn belgilarining vektor shakllari bilan to'ldirishlari mumkin. Yuqoridagi "Belgilar jadvali" da siz turli xil shriftlar turli sonli belgilarni qo'llab-quvvatlashini ko'rishingiz mumkin. Unicode-ga boy ba'zi shriftlar juda og'ir bo'lishi mumkin. Ammo endi ular turli xil kodlashlar uchun yaratilganligi bilan emas, balki shrift ishlab chiqaruvchisi yagona kod maydonini ma'lum vektor shakllari bilan to'ldirganligi yoki to'liq to'ldirmaganligi bilan farq qiladi.

Rus harflari o'rniga aqldan ozgan so'zlar - uni qanday tuzatish kerak

Keling, matn o'rniga krakozyabrlar qanday paydo bo'lishini yoki boshqacha qilib aytganda, ruscha matn uchun to'g'ri kodlash qanday tanlanganligini ko'rib chiqaylik. Aslida, u aynan shu matnni yoki matn parchalari yordamida kodni yaratadigan yoki tahrirlaydigan dasturda o'rnatiladi. Matn fayllarini tahrirlash va yaratish uchun men shaxsan juda yaxshi, mening fikrimcha, Html va PHP muharriri Notepad++ dan foydalanaman . Biroq, u yuzlab boshqa dasturlash va belgilash tillarining sintaksisini ajratib ko'rsatishi mumkin, shuningdek, plaginlar yordamida kengaytirilishi mumkin. Taqdim etilgan havolada ushbu ajoyib dasturning batafsil sharhini o'qing. Notepad++ ning yuqori menyusida "Kodlashlar" bandi mavjud bo'lib, siz mavjud variantni o'z saytingizda sukut bo'yicha foydalaniladigan variantga o'zgartirish imkoniyatiga ega bo'lasiz: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 9Joomla 1.5 va undan yuqori versiyalarida sayt bo'lsa, masalan shuningdek, WordPress-da blog bo'lsa, siz tashqi ko'rinishdan qochishingiz kerak Krakozyabrov BOM holda UTF 8 variantini tanlang . BOM prefiksi nima? Gap shundaki, ular YUTF-16 kodlashni ishlab chiqishda, negadir ular unga belgilar kodini to'g'ridan-to'g'ri ketma-ketlikda (masalan, 0A15) va teskari (150A) yozish qobiliyatini qo'shishga qaror qilishdi. . Va dasturlar kodlarni qanday ketma-ketlikda o'qishni tushunishlari uchun hujjatlarning boshida uchta qo'shimcha bayt qo'shish bilan ifodalangan BOM (bayt tartibi belgisi yoki boshqacha qilib aytganda imzo) ixtiro qilindi. UTF-8 kodlashda Unicode konsortsiumida hech qanday BOM taqdim etilmagan va shuning uchun imzo qo'shish (hujjatning boshidagi mashhur qo'shimcha uch bayt) ba'zi dasturlarning kodni o'qishiga to'sqinlik qiladi. Shuning uchun, fayllarni UTF-da saqlashda biz har doim BOMsiz (imzosiz) variantni tanlashimiz kerak. Shunday qilib, siz o'zingizni krakozyabrlarning sudralishidan oldindan himoya qilasiz . Shunisi e'tiborga loyiqki, Windows-dagi ba'zi dasturlar buni qila olmaydi (ular BOMsiz UTF-8-da matnni saqlay olmaydi), masalan, xuddi shu mashhur Windows Notepad. U hujjatni UTF-8 da saqlaydi, lekin baribir uning boshiga imzo qo'yadi (uchta qo'shimcha bayt). Bundan tashqari, bu baytlar har doim bir xil bo'ladi - kodni to'g'ridan-to'g'ri ketma-ketlikda o'qing. Ammo serverlarda bu kichik narsa tufayli muammo paydo bo'lishi mumkin - firibgarlar chiqadi. Shuning uchun, hech qanday holatda oddiy Windows bloknotidan foydalanmang .hech qanday yoriqlar paydo bo'lishini xohlamasangiz, saytingizdagi hujjatlarni tahrirlash uchun. Men yuqorida aytib o'tilgan Notepad++ muharririni eng yaxshi va eng oddiy variant deb bilaman, u deyarli hech qanday kamchiliklarga ega emas va faqat afzalliklardan iborat. Notepad++ da, siz kodlashni tanlaganingizda, matnni tabiatan Unicode standartiga juda yaqin bo'lgan UCS-2 kodlashiga aylantirish imkoniyatiga ega bo'lasiz. Shuningdek, Notepad-da ANSI-da matnni kodlash mumkin bo'ladi, ya'ni. Rus tiliga nisbatan, bu Windows 1251 bo'ladi, biz allaqachon yuqorida aytib o'tgan edik.Bu ma'lumot qayerdan olingan? U Windows operatsion tizimingiz reestrida ro'yxatdan o'tgan - ANSI holatida qaysi kodlashni tanlash kerak, OEM holatida qaysi birini tanlash kerak (rus tili uchun u CP866 bo'ladi). Agar siz kompyuteringizda boshqa standart tilni o'rnatgan bo'lsangiz, bu kodlashlar o'sha til uchun ANSI yoki OEM toifasidagi o'xshashlar bilan almashtiriladi. Hujjatni kerakli kodlashda Notepad++ da saqlaganingizdan yoki tahrirlash uchun saytdan hujjatni ochganingizdan so'ng, muharrirning pastki o'ng burchagida uning nomini ko'rishingiz mumkin: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 10chalkashmaslik uchun , yuqorida tavsiflangan amallarga qo'shimcha ravishda , serverda yoki mahalliy xostda chalkashliklarga yo'l qo'ymaslik uchun manba kodini uning sarlavhasiga saytning barcha sahifalariga ushbu kodlash haqidagi ma'lumotlarni yozish foydali bo'ladi. Umuman olganda, Html-dan tashqari barcha gipermatn belgilash tillari matn kodlashni belgilaydigan maxsus xml deklaratsiyasidan foydalanadi.
<?xml version="1.0" encoding="windows-1251"?>
Kodni tahlil qilishdan oldin brauzer qaysi versiyadan foydalanilayotganini va ushbu tilning belgilar kodlarini qanday izohlash kerakligini biladi. Shunisi e'tiborga loyiqki, agar siz hujjatni standart Unicode-da saqlasangiz, ushbu xml deklaratsiyasini o'tkazib yuborishingiz mumkin (kodlash BOM bo'lmasa UTF-8 yoki BOM mavjud bo'lsa UTF-16 deb hisoblanadi). HTML hujjatida Meta elementi kodlashni ko'rsatish uchun ishlatiladi , bu bosh teglari ochish va yopish o'rtasida joylashgan:
<head>
...
<meta charset="utf-8">
...
</head>
Ushbu yozuv Html 4.01 standartidan ancha farq qiladi, lekin Html 5 standartiga to'liq mos keladi va u hozirda foydalanilayotgan brauzerlar tomonidan to'g'ri tushuniladi. Nazariy jihatdan, Html hujjatining kodlanishini ko'rsatadigan Meta elementi hujjat sarlavhasida iloji boricha yuqoriroq joylashtirilsa yaxshi bo'lardi , shunda matn asosiy ANSI dan emas (har doim to'g'ri va to'g'ri o'qiladi) birinchi belgiga duch kelganda. har qanday o'zgarish), brauzer allaqachon ushbu belgilar kodlarini qanday talqin qilish haqida ma'lumotga ega bo'lishi kerak. Asl manbaga havola: ASCII matn kodlash (Windows 1251, CP866, KOI8-R) va Unicode (UTF 8, 16, 32) - krakerlar bilan muammoni qanday hal qilish mumkin
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION