JavaRush /Java Blogu /Random-AZ /ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16...
articles
Səviyyə

ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar

Qrupda dərc edilmişdir
Bu gün biz krakozyabrların vebsaytda və proqramlarda haradan gəldiyi, hansı mətn kodlaşdırmalarının mövcud olması və hansının istifadə edilməli olması barədə danışacağıq. Əsas ASCII-dən başlayaraq, onun genişləndirilmiş versiyaları CP866, KOI8-R, Windows 1251 və müasir Unicode konsorsium kodlaşdırmaları UTF 16 və 8 ilə bitən onların inkişaf tarixinə daha yaxından nəzər salaq. Mündəricat ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 1: Bəziləri üçün bu məlumat lazımsız görünə bilər, amma bilirsinizmi ki, mən xüsusilə sürünən krakozyabrlarla (oxunmayan simvollar toplusu) nə qədər sual alıram. İndi hər kəsi bu məqalənin mətninə yönəltmək və öz səhvlərimi tapmaq imkanım olacaq. Yaxşı, məlumatı mənimsəməyə hazır olun və hekayənin axını izləməyə çalışın.

ASCII - Latın əlifbası üçün əsas mətn kodlaşdırması

Mətn kodlaşdırmalarının inkişafı İT sənayesinin formalaşması ilə eyni vaxtda baş verdi və bu müddət ərzində onlar kifayət qədər çox dəyişikliklərə məruz qaldılar. Tarixən hər şey rus tələffüzündə kifayət qədər dissonant olan EBCDIC ilə başladı, bu da Latın əlifbasının hərflərini, ərəb rəqəmlərini və durğu işarələrini nəzarət simvolları ilə kodlamağa imkan verdi. Ancaq yenə də müasir mətn kodlaşdırmalarının inkişafı üçün başlanğıc nöqtəsi məşhur ASCII (Rus dilində adətən "soruş" kimi tələffüz edilən Amerika Standart Məlumat Mübadilə Kodu) hesab edilməlidir . O, ingilisdilli istifadəçilər tərəfindən ən çox istifadə edilən ilk 128 simvolu - latın hərfləri, ərəb rəqəmləri və durğu işarələrini təsvir edir. ASCII-də təsvir edilən bu 128 simvol həmçinin mötərizələr, hash işarələri, ulduzlar və s. kimi bəzi xidmət simvollarını ehtiva edir. Əslində, onları özünüz görə bilərsiniz: ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 2ASCII-nin orijinal versiyasından bu 128 simvol standart oldu və hər hansı digər kodlaşdırmada siz onları mütləq tapacaqsınız və onlar bu ardıcıllıqla görünəcəklər. Ancaq fakt budur ki, bir bayt məlumatın köməyi ilə siz 128 deyil, 256 fərqli dəyəri kodlaya bilərsiniz (səkkizin gücünə ikisi 256-ya bərabərdir), buna görə də Asuka-nın əsas versiyasından sonra bütövlükdə 128 əsas simvoldan əlavə, milli kodlaşdırma simvollarından (məsələn, rus dilində) istifadə etməklə kodlaşdırıla bilən genişlənmiş ASCII kodlaşdırma seriyası ortaya çıxdı. Burada, yəqin ki, təsvirdə istifadə olunan say sistemləri haqqında bir az daha deməyə dəyər. Birincisi, hamınız bildiyiniz kimi, kompüter yalnız ikili sistemdəki nömrələrlə, yəni sıfırlarla və birlərlə işləyir (əgər kimsə onu institutda və ya məktəbdə götürübsə, Boolean cəbri). Bir bayt səkkiz bitdən ibarətdir, onların hər biri sıfırdan başlayaraq ikinin iki dərəcəsini və ikiyə qədər yeddincini təmsil edir: ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 3 Belə bir konstruksiyada sıfırların və birlərin bütün mümkün kombinasiyalarını başa düşmək çətin deyil. yalnız 256 olsun. Ədədi ikilik sistemdən onluq sistemə çevirmək olduqca sadədir. Sadəcə ikinin bütün səlahiyyətlərini yuxarıda olanları toplamaq lazımdır. Bizim nümunəmizdə bu, 1 (sıfırın gücünə 2) üstəgəl 8 (3-ün gücünə iki), üstəgəl 32 (beşinci dərəcəyə iki), üstəgəl 64 (altıncı dərəcə), üstəgəl 128 olur. (yeddinci gücə). Cəmi 233-ə bərabərdir. Gördüyünüz kimi, hər şey çox sadədir. Ancaq ASCII simvolları ilə cədvələ diqqətlə baxsanız, onların onaltılıq kodlaşdırmada təmsil olunduğunu görərsiniz. Məsələn, "ulduz" Aski-də onaltılıq sayı 2A-ya uyğundur. Yəqin bilirsiniz ki, onaltılıq say sistemində ərəb rəqəmləri ilə yanaşı, A (on deməkdir)-dən F-ə qədər (on beş deməkdir) latın hərflərindən də istifadə olunur. Yaxşı, ikili ədədi onaltılıq rəqəmə çevirmək üçünaşağıdakı sadə üsula müraciət edin. Hər bir məlumat baytı dörd bitdən ibarət iki hissəyə bölünür. Bunlar. Hər yarım baytda yalnız on altı dəyər (ikidən dördüncü gücə qədər) ikilik sistemdə kodlaşdırıla bilər ki, bu da asanlıqla onaltılıq nömrə kimi təqdim edilə bilər. Üstəlik, baytın sol yarısında dərəcələri ekran görüntüsündə göstərildiyi kimi deyil, sıfırdan başlayaraq yenidən saymaq lazımdır. Nəticədə ekran görüntüsündə E9 nömrəsinin kodlandığını alırıq. Ümid edirəm ki, mənim mülahizələrimin gedişatı və bu tapmacanın həlli sizə aydın oldu. Yaxşı, indi mətn kodlaşdırması haqqında danışmağa davam edək.

Asuka-nın genişləndirilmiş versiyaları - psevdoqrafiya ilə CP866 və KOI8-R kodlaşdırmaları

Beləliklə, bütün müasir kodlaşdırmaların (Windows 1251, Unicode, UTF 8) inkişafı üçün başlanğıc nöqtəsi olan ASCII haqqında danışmağa başladıq. Əvvəlcə latın əlifbasının yalnız 128 simvolu, ərəb rəqəmləri və başqa bir şey var idi, lakin genişləndirilmiş versiyada bir bayt məlumatda kodlaşdırıla bilən bütün 256 dəyəri istifadə etmək mümkün oldu. Bunlar. Aski-yə dilinizin hərflərinin simvollarını əlavə etmək mümkün oldu. Burada mətn kodlaşdırmalarının ümumiyyətlə nə üçün lazım olduğunu və nə üçün bu qədər vacib olduğunu izah etmək üçün bir daha kənara çıxmalıyıq . Kompüterinizin ekranındakı simvollar iki şey əsasında formalaşır - müxtəlif simvolların vektor formaları (təmsilləri) dəstləri (onlar kompüterinizdə quraşdırılmış şriftləri olan fayllardadır) və tam olaraq onu çıxarmağa imkan verən kod bu vektor fiqurları dəstindən (şrift faylı). doğru yerə daxil edilməli olan simvol. Aydındır ki, şriftlərin özləri vektor formalarına cavabdehdirlər, lakin kodlaşdırma üçün əməliyyat sistemi və orada istifadə olunan proqramlar cavabdehdir. Bunlar. kompüterinizdə hər hansı bir mətn bayt dəsti olacaq, hər biri bu mətnin bir simvolunu kodlayır. Bu mətni ekranda (mətn redaktoru, brauzer və s.) göstərən proqram kodu təhlil edərkən növbəti simvolun kodlaşdırılmasını oxuyur və bunu göstərmək üçün qoşulmuş tələb olunan şrift faylında müvafiq vektor formasını axtarır. mətn sənədi. Hər şey sadə və banaldır. Bu o deməkdir ki, bizə lazım olan hər hansı simvolu (məsələn, milli əlifbadan) kodlaşdırmaq üçün iki şərt yerinə yetirilməlidir: bu simvolun vektor forması istifadə olunan şriftdə olmalıdır və bu simvol genişləndirilmiş ASCII kodlaşdırmalarında kodlaşdırıla bilər. bir baytda. Buna görə də, bu cür seçimlərin bir dəstəsi var. Yalnız rus dili simvollarını kodlaşdırmaq üçün genişləndirilmiş Aska-nın bir neçə çeşidi var. Məsələn, rus əlifbasından simvollardan istifadə etmək qabiliyyətinə malik olan CP866 əvvəlcə ortaya çıxdı və bu, ASCII-nin genişləndirilmiş versiyası idi. Yəni, onun yuxarı hissəsi yuxarıdakı ekran görüntüsündə təqdim olunan Aska-nın əsas versiyası (128 latın simvolu, rəqəmlər və digər cəfəngiyatlar) ilə tamamilə üst-üstə düşürdü, lakin CP866 kodlaşdırması olan cədvəlin aşağı hissəsində göstərilən görünüş var idi. bir az aşağıda ekran görüntüsü və başqa 128 simvolu kodlamağa icazə verilir (rus hərfləri və hər cür psevdoqrafik): ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 4 Görürsünüz, sağ sütunda rəqəmlər 8 ilə başlayır, çünki 0-dan 7-yə qədər rəqəmlər ASCII-nin əsas hissəsinə aiddir (ilk ekran görüntüsünə baxın). Beləliklə, CP866-da kiril "M" hərfi bir bayt məlumatda yazıla bilən 9C koduna sahib olacaq (onaltılıq say sistemində 9 ilə müvafiq sətir və C rəqəmi ilə sütunun kəsişməsində yerləşir) , və rus hərfləri ilə uyğun şrift varsa, bu hərf heç bir problem olmadan mətndə görünəcək. Bu məbləğ haradan gəldi?CP866-da psevdoqrafik ? Məsələ ondadır ki, rus mətni üçün bu kodlaşdırma qrafik əməliyyat sistemlərinin indiki kimi geniş yayılmadığı o çətin illərdə işlənib hazırlanmışdır. Dosa və buna bənzər mətn əməliyyat sistemlərində psevdoqrafik heç olmasa mətnlərin dizaynını şaxələndirməyə imkan verdi və buna görə də CP866 və Asuka-nın genişləndirilmiş versiyaları kateqoriyasındakı bütün digər həmyaşıdları orada çoxdur. CP866 IBM tərəfindən paylanmışdır, lakin buna əlavə olaraq rus dili simvolları üçün bir sıra kodlaşdırmalar hazırlanmışdır, məsələn, KOI8-R eyni tipə aid edilə bilər (genişlənmiş ASCII) : ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 5Onun işləmə prinsipi eyni olaraq qalır CP866 bir az əvvəl təsvir edilmişdir - Mətnin hər simvolu bir bayt kimi kodlanır. Ekran görüntüsü KOI8-R cədvəlinin ikinci yarısını göstərir, çünki birinci yarı bu məqalədəki ilk ekran görüntüsündə göstərilən əsas Asuka ilə tamamilə uyğundur. KOI8-R kodlaşdırmasının xüsusiyyətləri arasında qeyd etmək olar ki, onun cədvəlindəki kiril hərfləri CP866-da olduğu kimi əlifba sırası ilə deyil. İlk ekran görüntüsünə (bütün genişləndirilmiş kodlaşdırmalara daxil olan əsas hissənin) baxsanız, KOI8-R-də rus hərflərinin Latın əlifbasının müvafiq hərfləri ilə cədvəlin eyni xanalarında yerləşdiyini görəcəksiniz. cədvəlin birinci hissəsindən. Bu, yalnız bir biti (ikidən yeddinci gücə və ya 128) atmaqla rus dilindən Latın hərflərinə keçidin rahatlığı üçün edildi.

Windows 1251 - ASCII-nin müasir versiyası və çatların niyə çıxması

Mətn kodlaşdırmasının sonrakı inkişafı qrafik əməliyyat sistemlərinin populyarlıq qazanması və zaman keçdikcə onlarda psevdoqrafikdən istifadə ehtiyacının aradan qalxması ilə əlaqədar idi. Nəticədə, bütöv bir qrup yarandı ki, əslində Asuka-nın hələ də genişləndirilmiş versiyaları (mətnin bir simvolu yalnız bir bayt məlumatla kodlanır), lakin psevdoqrafik simvollardan istifadə etmədən. Onlar Amerika Standartları İnstitutu tərəfindən hazırlanmış sözdə ANSI kodlaşdırmalarına aid idi. Ümumi dildə desək, rus dilini dəstəkləyən versiya üçün də kiril adından istifadə edilib. Buna misal olaraq Windows 1251 ola bilər . Əvvəllər istifadə olunan CP866 və KOI8-R-dən müsbət şəkildə fərqlənirdi ki, ondakı psevdoqrafik simvolların yerini rus tipoqrafiyasının çatışmayan simvolları (vurğu işarəsi istisna olmaqla), həmçinin slavyan dillərində istifadə olunan simvollara yaxın idi. Rus dili (Ukrayna, Belarusiya və s.). ): Rus dilinin kodlaşdırmasının bu qədər bolluğu səbəbindən şrift istehsalçıları və proqram istehsalçıları daim baş ağrıları keçirirdilər və siz və mən, əziz oxucular, tez-tez eyni bədnam səhvlərləASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 6 problem yaşayırdıq. mətndə istifadə olunan versiya ilə qarışıqlıq yarandıqda. Çox vaxt onlar e-poçtla mesajlar göndərərkən və qəbul edərkən ortaya çıxdılar, bu da çox mürəkkəb çevrilmə cədvəllərinin yaradılmasına səbəb oldu, bu da əslində bu problemi əsaslı şəkildə həll edə bilmədi və istifadəçilər tez-tez yazışmalar üçün Latın hərflərinin transliterasiyasından istifadə etdilər. CP866, KOI8-R və ya Windows 1251 kimi rus kodlaşdırmalarından istifadə edərkən bədnam boşboğazlıqdan qaçın. Əslində, rus dilində mətnin əvəzinə yaranan çatlar verilmiş dilin kodlaşdırmasının düzgün istifadə edilməməsi nəticəsində yaranıb və bu, həmin dilin kodlaşdırmasına uyğun gəlmir. mətn mesajı əvvəlcə kodlaşdırılıb. Deyək ki, Windows 1251 kod cədvəlindən istifadə edərək CP866 istifadə edərək kodlanmış simvolları göstərməyə çalışsanız, mesajın mətnini tamamilə əvəz edərək, eyni cəfəngiyat (mənasız simvol dəsti) çıxacaq. Bənzər bir vəziyyət tez-tez veb saytlar, forumlar və ya bloglar yaratdıqda və qurarkən, rus hərfləri olan mətn səhvən saytda standart olaraq istifadə olunan səhv kodlaşdırmada və ya görünməz bir tıxac əlavə edən səhv mətn redaktorunda saxlandıqda yaranır. koda çılpaq gözlə. Nəhayət, bir çox insanlar bu vəziyyətdən çoxlu kodlaşdırma və daim sürünən axmaqlıqdan bezdilər və bütün mövcud olanları əvəz edəcək və oxunmayan mətnlərin görünüşü ilə problemi həll edəcək yeni universal variasiyanın yaradılması üçün ilkin şərtlər ortaya çıxdı. . Bundan əlavə, Çin kimi dillər problemi var idi, burada 256-dan daha çox dil simvolu var idi. ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 7

Unicode - universal kodlaşdırma UTF 8, 16 və 32

Cənub-Şərqi Asiya dil qrupunun bu minlərlə simvolunu ASCII-nin genişləndirilmiş versiyalarında simvolların kodlaşdırılması üçün ayrılmış bir bayt məlumatda təsvir etmək mümkün deyildi. Nəticədə universal mətn kodlaşdırmasının yaranmasında maraqlı olan bir çox İT sənayesi liderlərinin (proqram istehsal edənlər, texniki vasitələri kodlayanlar, şriftlər yaradanlar) əməkdaşlığı ilə Unicode (Unicode Consortium) adlı konsorsium yaradıldı. Unicode Konsorsiumunun himayəsi altında buraxılan ilk variasiya UTF 32 idi . Kodlaşdırma adındakı rəqəm bir simvolu kodlaşdırmaq üçün istifadə olunan bitlərin sayını bildirir. 32 bit yeni universal UTF kodlaşdırmasında bir simvolu kodlaşdırmaq üçün lazım olan 4 bayt məlumata bərabərdir. Nəticədə, ASCII-nin genişləndirilmiş versiyasında və UTF-32-də kodlanmış mətnlə eyni fayl, sonuncu halda, dörd dəfə daha böyük ölçüyə (çəki) sahib olacaqdır. Bu pisdir, amma indi UTF-dən istifadə edərək ikidən otuz ikinci gücə bərabər olan bir sıra simvolları kodlaşdırmaq imkanımız var ( həqiqətən zəruri dəyəri böyük bir marja ilə əhatə edəcək milyardlarla simvol ). Lakin Avropa qrupunun dilləri olan bir çox ölkələr kodlaşdırmada belə çox sayda simvoldan istifadə etməyə ehtiyac duymadılar, lakin UTF-32-dən istifadə edərkən heç bir səbəb olmadan mətn sənədlərinin çəkisini dörd dəfə artırdılar, və nəticədə internet trafikinin həcminin və saxlanılan məlumatların həcminin artması. Bu, çox şeydir və heç kimin belə tullantılara gücü çatmaz. Unicode-un inkişafı nəticəsində UTF-16 ortaya çıxdı , o qədər uğurlu oldu ki, istifadə etdiyimiz bütün simvollar üçün əsas yer kimi standart olaraq qəbul edildi. Bir simvolu kodlaşdırmaq üçün iki baytdan istifadə edir. Gəlin görək bu şey necə görünür. Windows əməliyyat sistemində "Başlat" - "Proqramlar" - "Aksesuarlar" - "Sistem Alətləri" - "Xarakter Cədvəli" yolunu izləyə bilərsiniz. Nəticədə, sisteminizdə quraşdırılmış bütün şriftlərin vektor formaları ilə bir cədvəl açılacaqdır. “Qabaqcıl seçimlər”də Unicode simvol dəstini seçsəniz, hər bir şrift üçün ona daxil olan bütün simvol diapazonunu ayrıca görə biləcəksiniz. Yeri gəlmişkən, onlardan hər hansı birinin üzərinə klikləməklə, onun iki baytlıq kodunu UTF-16 formatında görə bilərsiniz , dörd onaltılıq rəqəmdən ibarətdir: ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 816 bit istifadə edərək UTF-16-da neçə simvol kodlaşdırıla bilər? 65,536 (on altının gücünə iki) və bu Unicode-da əsas boşluq kimi qəbul edilmiş rəqəmdir. Bundan əlavə, ondan istifadə edərək təxminən iki milyon simvolu kodlaşdırmağın yolları var, lakin onlar bir milyon simvol mətnin genişlənmiş sahəsi ilə məhdudlaşdılar. Ancaq hətta Unicode kodlaşdırmasının bu uğurlu versiyası, məsələn, proqramları yalnız ingilis dilində yazanları çox da qane etmədi, çünki ASCII-nin genişləndirilmiş versiyasından UTF-16-ya keçiddən sonra sənədlərin çəkisi ikiqat artdı (hər bir bayt üçün bir bayt). Aski-də simvol və YUTF-16-da eyni simvol üçün iki bayt). Unicode konsorsiumunda hər kəsi və hər şeyi qane etmək üçün dəyişən uzunluqlu kodlaşdırma ilə gəlmək qərara alındı . UTF-8 adlanırdı. Adındakı səkkizə baxmayaraq, əslində dəyişən uzunluğa malikdir, yəni. Mətnin hər simvolu uzunluğu bir ilə altı bayt arasında olan ardıcıllıqla kodlaşdırıla bilər. Təcrübədə UTF-8 yalnız birdən dörd bayta qədər olan diapazondan istifadə edir, çünki dörd bayt koddan artıq heç nəyi təsəvvür etmək hətta nəzəri cəhətdən mümkün deyil. Bütün Latın simvolları köhnə ASCII-də olduğu kimi bir bayta kodlanır. Diqqət çəkən odur ki, yalnız Latın əlifbasının kodlaşdırılması vəziyyətində, hətta Unicode-u başa düşməyən proqramlar hələ də YTF-8-də kodlaşdırılanları oxuyacaqlar. Yəni, Asuka-nın əsas hissəsi sadəcə Unicode konsorsiumunun bu beyninə köçürüldü. UTF-8-də kiril simvolları iki bayta, məsələn, gürcü simvolları üç bayta kodlanır. Unicode Konsorsiumu, UTF 16 və 8 yaratdıqdan sonra əsas problemi həll etdi - indi şriftlərimizdə tək kod sahəsi var . İndi onların istehsalçıları onu yalnız güclü və imkanlarına əsaslanaraq mətn simvollarının vektor formaları ilə doldura bilərlər. Yuxarıdakı "Xarakter Cədvəli"ndə müxtəlif şriftlərin müxtəlif sayda simvolları dəstəklədiyini görə bilərsiniz. Bəzi Unicode ilə zəngin şriftlər olduqca ağır ola bilər. Ancaq indi onlar fərqli kodlaşdırmalar üçün yaradılmasında deyil, şrift istehsalçısının vahid kod sahəsini müəyyən vektor formaları ilə doldurması və ya tam doldurmaması ilə fərqlənir.

Rus hərfləri yerinə dəli sözlər - onu necə düzəltmək olar

İndi krakozyabrların mətn əvəzinə necə göründüyünü və ya başqa sözlə, rus mətni üçün düzgün kodlaşdırmanın necə seçildiyini görək. Əslində, bu mətni yaratdığınız və ya redaktə etdiyiniz proqramda və ya mətn fraqmentlərindən istifadə edərək kodda qurulur. Mətn fayllarını redaktə etmək və yaratmaq üçün mən şəxsən çox yaxşı, fikrimcə, Html və PHP redaktoru Notepad++ istifadə edirəm . Bununla belə, o, yüzlərlə digər proqramlaşdırma və işarələmə dillərinin sintaksisini vurğulaya bilər və həmçinin plaginlərdən istifadə edərək genişləndirmək imkanına malikdir. Təqdim olunan linkdə bu gözəl proqramın ətraflı icmalını oxuyun. Notepad++-ın yuxarı menyusunda “Kodlamalar” maddəsi var, burada siz mövcud variantı saytınızda standart olaraq istifadə olunan seçimə çevirmək imkanınız olacaq: ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 9Joomla 1.5 və daha yüksək versiyada olan saytlar üçün, həmçinin WordPress bir blog halda, siz görünüşü qarşısını almaq lazımdır Krakozyabrov BOM olmadan UTF 8 seçimi seçin . BOM prefiksi nədir? Fakt budur ki, YUTF-16 kodlaşdırmasını hazırlayarkən, nədənsə ona simvol kodunu həm birbaşa ardıcıllıqla (məsələn, 0A15), həm də tərs (150A) yazmaq imkanı kimi bir şey əlavə etmək qərarına gəldilər. . Proqramların kodların hansı ardıcıllıqla oxunacağını başa düşməsi üçün sənədlərin ən əvvəlinə üç əlavə bayt əlavə etməklə ifadə olunan BOM (Bayt Sifariş İşarəsi və ya başqa sözlə imza) icad edilmişdir. UTF-8 kodlaşdırmasında Unicode konsorsiumunda heç bir BOM təmin edilməmişdir və buna görə də imza əlavə etmək (sənədin əvvəlində bu bədnam əlavə üç bayt) sadəcə bəzi proqramların kodu oxumasına mane olur. Buna görə də, faylları UTF-də saxlayarkən həmişə BOM olmadan (imzasız) seçimi seçməliyik. Beləliklə, özünüzü krakozyabrların sürünməsindən əvvəlcədən qoruyacaqsınız . Maraqlısı odur ki, Windows-dakı bəzi proqramlar bunu edə bilməz (onlar BOM olmadan UTF-8-də mətni saxlaya bilməzlər), məsələn, eyni bədnam Windows Notepad. O, sənədi UTF-8-də saxlayır, lakin onun əvvəlinə imzanı (üç əlavə bayt) əlavə edir. Üstəlik, bu baytlar həmişə eyni olacaq - kodu birbaşa ardıcıllıqla oxuyun. Ancaq serverlərdə bu kiçik şeyə görə problem yarana bilər - fırıldaqçılar çıxacaq. Buna görə də, heç bir halda adi Windows bloknotundan istifadə etməyin .çatların görünməsini istəmirsinizsə, saytınızdakı sənədləri redaktə etmək üçün. Artıq qeyd olunan Notepad++ redaktorunu praktiki olaraq heç bir çatışmazlıqları olmayan və yalnız üstünlüklərdən ibarət olan ən yaxşı və ən sadə variant hesab edirəm. Notepad++ proqramında kodlaşdırmanı seçdiyiniz zaman mətni Unicode standartına çox yaxın olan UCS-2 kodlamasına çevirmək seçiminiz olacaq. Həmçinin Notepad-da mətni ANSI-də kodlaşdırmaq mümkün olacaq, yəni. rus dilinə münasibətdə bu, yuxarıda yuxarıda təsvir etdiyimiz Windows 1251 olacaq.Bu məlumat haradan gəlir? O, Windows əməliyyat sisteminizin reyestrində qeydə alınıb - ANSI vəziyyətində hansı kodlaşdırmanı seçmək, OEM vəziyyətində hansını seçmək (rus dili üçün bu CP866 olacaq). Əgər kompüterinizdə başqa standart dil quraşdırsanız, bu kodlaşdırmalar həmin dil üçün ANSI və ya OEM kateqoriyasındakı oxşarlarla əvəz olunacaq. Sənədi Notepad++ proqramında sizə lazım olan kodlaşdırmada saxladıqdan və ya sənədi redaktə etmək üçün saytdan açdıqdan sonra onun adını redaktorun aşağı sağ küncündə görə biləcəksiniz: ASCII (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) mətn kodlaşdırması - krakerlərlə problemi necə həll etmək olar - 10Qarışıqlığın qarşısını almaq üçün yuxarıda təsvir edilən addımlara əlavə olaraq , serverdə və ya yerli hostda çaşqınlıq olmaması üçün mənbə kodunu onun başlığına saytın bütün səhifələrində bu kodlaşdırma haqqında məlumat yazmaq faydalı olacaq. Ümumiyyətlə, Html-dən başqa bütün hipermətn işarələmə dilləri mətn kodlamasını təyin edən xüsusi xml bəyannaməsindən istifadə edir.
<?xml version="1.0" encoding="windows-1251"?>
Kodu təhlil etməzdən əvvəl brauzer hansı versiyanın istifadə olunduğunu və həmin dilin simvol kodlarını necə dəqiq şərh etməsi lazım olduğunu bilir. Ancaq diqqət çəkən odur ki, sənədi standart Unicode-da saxlasanız, bu xml bəyannaməsi buraxıla bilər (BOM yoxdursa kodlaşdırma UTF-8 və ya BOM varsa UTF-16 hesab olunacaq). HTML sənədi vəziyyətində, Meta elementi kodlaşdırmanı göstərmək üçün istifadə olunur , bu açılış və bağlanma baş teqləri arasında yerləşdirilir:
<head>
...
<meta charset="utf-8">
...
</head>
Bu giriş Html 4.01-dəki standartdan tamamilə fərqlidir, lakin Html 5 standartına tam uyğundur və hazırda istifadə olunan istənilən brauzer tərəfindən düzgün başa düşüləcək. Nəzəri olaraq, Html sənədinin kodlaşdırılmasını göstərən Meta elementi sənədin başlığında mümkün qədər yüksək yerləşdirmək daha yaxşı olardı ki, mətn əsas ANSI-dən olmayan (həmişə düzgün oxunur və mətndə) ilk simvolla qarşılaşdıqda hər hansı bir variasiya), brauzer artıq bu simvolların kodlarını necə şərh etməsi haqqında məlumat əldə etməlidir. Orijinal mənbəyə keçid: ASCII mətn kodlaşdırması (Windows 1251, CP866, KOI8-R) və Unicode (UTF 8, 16, 32) - krakerlərlə problemi necə həll etmək olar
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION