Кіріспе

Юникод таңбалары мен HTML арасындағы қатынас HyperText Markup Language (HTML) тілінде жасалған веб-беттерде көп тілді мәтін Юникодтың әмбебап таңбалар жиынтығы арқылы бейнеленуі мүмкін. Юникод пен HTML арасындағы қарым-қатынастың кілті – HTML құжатында болуы мүмкін таңбалар жиынтығын анықтайтын және оларға нөмір беретін "документ таңбалар жиынтығы", сондай-ақ берілген құжатты байттар тізбегі ретінде кодтау үшін қолданылатын "сыртқы таңба кодтамасы" немесе "charset". RFC 1866 стандартында, HTML 2.0 нұсқасында, документ таңбалар жиынтығы ISO 8859-1 ретінде (кейінгі HTML стандарттары Windows 1252 кодтамасын қолданады) анықталды. Кейіннен ол ISO 10646 стандартына дейін кеңейтілді (ол Юникодқа тең). Бұл стандарт түрлі тілдердегі немесе платформалардағы құжаттар үшін өзгермейді. Сыртқы таңба кодтамасын құжат авторы (немесе автор құжатты жасау үшін қолданатын бағдарламалық құрал) таңдайды және ол құжатты сақтау және/немесе жіберу үшін қолданылатын байттардың документ таңбалар жиынтығындағы таңбаларға қалай сәйкес келетінін анықтайды. Таңдалған сыртқы таңба кодтамасында жоқ таңбалар таңбалық тізімдер арқылы көрсетілуі мүмкін. Юникод пен HTML арасындағы қарым-қатынас көптеген компьютер мамандары, құжат авторлары және веб-пайдаланушылар үшін қиын мәселе болып табылады. Әр түрлі табиғи тілдер мен жазу жүйелеріндегі веб-беттердегі мәтінді дұрыс көрсету таңба кодтау, таңбалау тілінің синтаксисі, шрифттер және веб-браузерлердің қолдау деңгейіне байланысты қиындықтар тудырады.

HTML құжатының таңбалары

Веб-беттер әдетте HTML немесе XHTML құжаттары болып табылады. Екі типтегі құжаттардың да негізінде таңбалар тұрады, олар графемалар мен графемаға ұқсас бірліктер болып табылады, компьютерлік сақтау жүйелері мен желілерде олардың қалай көрініс табуына қарамастан. HTML құжаты – Юникод таңбаларының тізбегі. Нақтырақ айтқанда, HTML 4.0 құжаттары HTML құжатының таңбалар жиынтығындағы таңбалардан тұруы керек: әр таңбаға бірегей, теріс емес бүтін кодтық нүкте тағайындалған таңбалар жиынтығы. Бұл жиынтық HTML 4.0 DTD-де анықталады, ол сонымен қатар жарамды HTML құжатын құруға мүмкіндік беретін синтаксисті (таңбалардың рұқсат етілген тізбегін) белгілейді. HTML 4.0 үшін HTML құжатының таңбалар жиынтығы Юникод пен ISO/IEC 10646: Универсалды таңбалар жиынтығы (UCS) бірлесіп анықтаған таңбалардың көпшілігінен тұрады, бірақ барлығынан емес. HTML құжаттары сияқты, XHTML құжаты да Юникод таңбаларының тізбегі болып табылады. Дегенмен, XHTML құжаты – XML құжаты, ол абстракцияның нақты «құжат таңбасы» қабатына ие болмаса да, Юникод/UCS таңбаларының барлығын қамти бермейтін, бірақ көпшілігін қамтитын рұқсат етілген таңбалардың ұқсас анықтамасына сүйенеді. HTML және XHTML/XML пайдаланатын жиынтықтар сәл өзгеше, бірақ бұл айырмашылықтар орташа құжат авторына көбінесе елеусіз. Құжат HTML немесе XHTML болсын, файлдық жүйеде сақталғанда немесе желі арқылы жіберілгенде, құжаттың таңбалары белгілі бір таңба кодтауы бойынша биттік октеттердің (байттардың) тізбегі ретінде кодталады. Бұл кодтау UTF-8 сияқты, кез келген Юникод таңбасын тікелей кодтай алатын Юникод түрлендіру форматы немесе Windows 1252 сияқты, ескі кодтау болуы мүмкін. Алайда, барлық Юникод таңбаларын қолдамайтын кодтаулар қолданылғанда да, кодталған құжат сандық таңба сілтемелерін пайдалана алады. Мысалы, ☺ (☺) Юникод таңбалар жиынтығында күлімдеген бетті көрсету үшін қолданылады.

Таңба кодтамасы

Сандық таңба сілтемелерін пайдаланбастан барлық Юникод таңбаларын қолдау үшін веб-бет Юникодтың барлық кодтамасын қамтуы керек. Ең көп таралғаны – UTF-8, онда ASCII таңбалары, мысалы, ағылшын әріптері, сандар және басқа да жиі қолданылатын таңбалар ASCII-ге қатысты өзгеріссіз сақталады. Бұл HTML кодын (мысалы, <br> және </div>) ASCII-мен салыстырғанда өзгертусіз қалдырады. ASCII диапазонынан тыс таңбалар 2–4 байт көлемінде сақталады. Заманауи браузерлер қолдайтын, бірақ сирек қолданылатын UTF-16-ны пайдалану да мүмкін, онда көптеген таңбалар әртүрлі енділікпен екі байт ретінде сақталады.

Сандық таңбалар сілтемелері

Ескі кодтамалардың шектеулерін айналып өту үшін HTML бүкіл Юникодтың таңбаларын HTML құжатында сандық таңба сілтемесі арқылы көрсетуге мүмкіндік береді: көрсетіліп жатқан таңбаның Юникод код нүктесін нақты көрсететін таңбалар тізбегі. Таңба сілтемесі &#N; нысанында болады, мұнда N – Юникод код нүктесінің ондық саны немесе он алтылық саны, он алтылық болған жағдайда ол x әрпімен басталуы керек. Сандық таңба сілтемесін құрайтын таңбалар Интернетте қолданылуға бекітілген кез келген кодтамада әртүрлі бейнеленеді. Оn алтылықты қолдау соңғы уақытта енгізілді, сондықтан ескі браузерлер он алтылық сандармен сілтемеленген таңбаларды көрсетуде қиындықтарға тап болуы мүмкін, бірақ олар бәрібір 255-тен жоғары кодты Юникод таңбаларын көрсетуде мәселелер тудыруы мүмкін. Ескі браузерлермен жақсы үйлесімділікті қамтамасыз ету үшін он алтылық код нүктесін ондық мәнге түрлендіру әлі де кең таралған тәжірибе (мысалы, &#21512; &#x5408; орнына).

Аталған таңбалар

HTML 4-те кейбір жалпы, ал кейбіреулері сирек кездесетін, белгілі бір таңба кодтамаларында табылмайтын немесе кейбір жағдайларда маңызды (мысалы, бұрышты жақшалар мен тырнақшалар) болатын 252 атаулы таңбалық бірліктердің стандартты жиынтығы бар. Кез келген Юникод таңбасын оның сандық код нүктесі арқылы көрсетуге болады, бірақ кейбір HTML құжаттарының авторлары, мүмкіндігі болғанда, осы атаулы бірліктерді пайдалануды ұсынады, себебі олар түсініксіз емес және бұрынғы браузерлерде жақсы қолдауға ие болған. Таңбалық бірліктер HTML құжатына &EntityName; пішіндегі бірлік сілтемелерін қолдану арқылы қосылуы мүмкін, мұнда EntityName – бірлік атауы. Мысалы, &mdash; сияқты &#8212; немесе &#x2014; em тіреуіш таңбасын "—" көрсетеді, тіпті қолданылған таңба кодтамасында бұл таңба болмаса да. Толық тізімді мына жерден қараңыз: XML және HTML таңбалық бірліктерінің сілтемелер тізімі.

Таңба кодтауын анықтау

HTML-ді дұрыс өңдеу үшін веб-браузер HTML құжатының кодталған түрінде қандай Юникод әріптері көрсетілгенін анықтауы тиіс. Мұны істеу үшін веб-браузер қандай кодтау қолданылғанын білуі керек.

Ақпаратты кодтау

Құжат MIME хабарламасы немесе HTTP жауабы сияқты MIME мазмұны түрлерін пайдаланатын беру арқылы жіберілген кезде, хабарлама Content Type: text/html; charset=UTF-8 сияқты Content Type басшысы арқылы кодтауды көрсетуі мүмкін. Кодтауды жариялаудың басқа сыртқы тәсілдеріне де рұқсат етіледі, бірақ олар көбінесе қолданылмайды. Егер құжат Unicode кодтамасын қолданса, кодтау туралы ақпарат байт ретінің белгісі (BOM) түрінде де болуы мүмкін. Соңында, кодтау HTML синтаксисі арқылы жариялануы мүмкін. text/html форматындағы жазба үшін, егер бет ASCII кеңейтімінде кодталған болса (мысалы, UTF-8, демек, егер бет UTF-16 қолданбаса), <meta http-equiv="content type" content="text/html; charset=UTF-8"> немесе (HTML5 нұсқасынан бастап) <meta charset="UTF-8"> сияқты мета элементін пайдалануға болады. XML ретінде жазылған HTML беттері үшін, декларациялау опциялары кодтаудың әдепкі параметріне (XML құжаттары үшін UTF-8) сүйену немесе XML кодтау декларациясын пайдалану болып табылады. Мета атрибуты XML ретінде берілетін HTML үшін ешқандай рөл атқармайды.

Кодтаудың әдетті параметрлері

Сыртқы немесе ішкі кодтау туралы мәлімдеме және байт ретінің белгісі болмаған жағдайда, әдепкі кодтау қолданылады. XML ретінде берілетін HTML беттері үшін әдепкі кодтау UTF-8 болуы керек, бірақ әдеттегі веб-беттердің (яғни, мәтін/html түрінде сақталатын HTML беттері үшін) әдепкі кодтау браузердің тілдік параметрлеріне байланысты өзгереді. Батыс Еуропа тілдеріне бағытталған жүйелерде ол әдетте Windows 1252 болады. Кириллица әліпбиін қолданатын тілдік параметрлер үшін әдетте Windows 1251 қолданылады. Ескі көп байттық таңбалық кодтаулар кең таралған аймақтардағы браузерлер автоматты түрде анықтау механизмін қолдануы мүмкін.

Кодтау үрдісі

Бағдарламалау тілдері мен операциялық жүйелердегі 8 биттік мәтіндік өрнектеулердің тарихи қалдығы және пайдаланушыларды кодтаудың күрделігін түсінуге мәжбүрлемеу ниетінің салдарынан, HTML авторлары қолданатын көптеген мәтіндік редакторлар файлдарды дискіге сақтағанда кодтауды таңдау мүмкіндігін ұсынбайды немесе ұсынуға құлықсыз болады, тіпті кейде өте шектеулі диапазоннан тыс символдарды енгізуге рұқсат бермейді. Осының нәтижесінде көптеген HTML авторлары кодтау мәселелерінен хабарсыз және өздерінің құжаттары қандай кодтауды қолданатынын білмейді. Кодтау туралы хабарламаның нақты кодтауды өзгертетіні деген жаңылыс пікір (бірақ ол тек қана дәлдігі күмәнді болуы мүмкін жазба ғана), сондай-ақ редакторлардың мұндай көзқарасының себебі болып табылады. Бұл бағыттағы тағы бір фактор – UTF-8 технологиясының пайда болуы, ол басқа кодтаулардың қажеттілігін азайтады, сондықтан қазіргі заманғы редакторлар HTML5 спецификациясында ұсынылғандай, әдепкі ретінде UTF-8 стандартына көшуге бейім.

Байт реті белгісі/Уникодты аңқау

HTML-нің екі түрлі форматталуы үшін де (мәтін түрі "text/html" және мазмұн түрі "application/xhtml+xml") байт реті белгісі (BOM) HTML құжатында кодтау туралы ақпаратты жеткізудің тиімді жолы болып табылады. UTF-8 үшін BOM міндетті емес, бірақ UTF-16 және UTF-32 кодтаулары үшін қажет. (Ескерту: BOM-сыз UTF-16 және UTF-32 әртүрлі атаулармен белгілі, олар – бөлек кодтаулар, сондықтан оларға кодтауды жариялаудың бір түрі қажет – UTF-16BE, UTF-16LE, UTF-32LE және UTF-32BE қараңыз.) BOM белгісін (U+FEFF) пайдалану, кодтауды кез келген өңдеу бағдарламасына автоматты түрде жариялайды. Өңдеу бағдарламаларына құжатты UTF-32, UTF-16 немесе UTF-8 ретінде анықтау үшін байт ағынында бастапқы 0x0000FEFF, 0xFEFF немесе 0xEFBBBF іздеу жеткілікті. Бұл кодтаулар үшін қосымша метадеректер механизмдері қажет емес, себебі байт реті белгісі өңдеу бағдарламаларына қажетті барлық ақпаратты қамтиды. Көп жағдайда байт реті белгісі басқа таңбалардан бөлек өңделеді, сондықтан автордың оны алып тастауы немесе қате кодтауды көрсету үшін өзгерту қаупі төмен (бұл кодтау ағылшын/латын әрпімен жарияланғанда болуы мүмкін). Егер құжатта байт реті белгісі болмаса, HTML құжатындағы алғашқы бос емес басып шығарылатын таңба "<" (U+003C) болуы керек екендігін пайдаланып UTF-8/UTF-16/UTF-32 кодтауын анықтауға болады.

Кодтауды ауыстырып жазу

Көптеген HTML-құжаттар дұрыс емес кодтау туралы ақпаратпен немесе ешқандай кодтау туралы ақпаратсыз жіберіледі. Мұндай жағдайларда кодтауды анықтау үшін көптеген браузерлер пайдаланушыға тізімнен кодтау атауын қолмен таңдауға мүмкіндік береді. Олар сондай-ақ BOM-мен жұмыс істейтін немесе HTML-ді XML ретінде берген кезде қолмен өзгертуге болатын кодтауды автоматты түрде анықтау алгоритмін қолдануы мүмкін. Мәтін/html форматындағы HTML-құжаттар үшін қолмен өзгерту барлық құжаттарға немесе декларацияларды және/немесе байт үлгілерін қарау арқылы кодтауды анықтау мүмкін болмайтын құжаттарға ғана қолданылуы мүмкін. Қолмен өзгертудің болуы және оның кеңінен қолданылуы вебте кодтау декларацияларын қабылдауға кедергі келтіреді, сондықтан бұл мәселе сақталуы мүмкін. Бірақ Internet Explorer, Chrome және Safari браузерлері XML және мәтін/html форматтарында бетке BOM қосылған кезде кодтауды өзгертуге рұқсат етпейтінін ескеріңіз. Артықшылықты XML белгісі application/xhtml+xml форматындағы HTML-құжаттар үшін кодтауды қолмен өзгертуге рұқсат жоқ. Мұндай XML құжатының кодтауын өзгерту құжаттың XML форматында болмауына әкеледі, себебі XML құжаттарында анықталған қателер бар кодтау декларациясы болса, ол қателік болып саналады. Қазіргі уақытта Gecko браузерлері, мысалы Firefox, осы ережеге сәйкес келеді, ал HTML-ді XML ретінде қолдайтын Webkit браузерлері (Chrome/Safari) сияқты көптеген басқа браузерлер XHTML құжаттарының кодтауын қолмен өзгертуге мүмкіндік береді.

Веб- шолғышты қолдау

Көптеген браузерлер толық Юникод репертуарының шағын бөлігін ғана көрсетуге қабілетті. Міне, сіздің браузеріңіз әртүрлі Юникод кодтық нүктелерін қалай көрсетеді:

+Мысал веб-браузерде Юникод таңбаларын қолдау
Таңба HTML сілтемесі Юникод атауы Сіздің браузеріңізде көрсетілетін нәрсе
U+0041 &#65; немесе &#x41; Latin capital letter A A
U+00DF &#223; немесе &#xDF; Latin small letter Sharp S ß
U+00FE &#254; немесе &#xFE; Latin small letter Thorn þ
U+0394 &#916; немесе &#x394; Greek capital letter Delta Δ
U+017D &#381; немесе &#x17D; Latin capital letter Z with háček Ž
U+0419 &#1049; немесе &#x419; Cyrillic capital letter Short I Й
U+05E7 &#1511; немесе &#x5E7; Hebrew letter Qof ק
U+0645 &#1605; немесе &#x645; Arabic letter Meem م
U+0E57 &#3671; немесе &#xE57; Thai digit 7 ๗
U+1250 &#4688; немесе &#x1250; Ge'ez syllable Qha ቐ
U+3042 &#12354; немесе &#x3042; Hiragana letter A (Japanese) あ
U+53F6 &#21494; немесе &#x53F6; CJK Unified Ideograph 53F6 (Simplified Chinese "Leaf") 叶
U+8449 &#33865; немесе &#x8449; CJK Unified Ideograph 8449 (Traditional Chinese "Leaf") 葉
U+B5AB &#46507; немесе &#xB5AB; Hangul syllable Tteolp (Korean "Ssangtikeut Eo Rieulbieup") 떫
U+16A0 &#5792; немесе &#x16A0; Runic letter Fehu ᚠ
U+0D37 &#3383; немесе &#x0D37; Malayalam letter ഷ (ṣha) ഷ
U+1F602 &#128514; немесе &#x1F602; Face with Tears of Joy emoji 😂

Жоғарыдағы барлық таңбаларды көрсету үшін Code2000 сияқты бір немесе бірнеше үлкен көптілді қаріптерді орнату қажет болуы мүмкін. Кейбір веб-браузерлер, мысалы Mozilla Firefox, Opera, Safari және Internet Explorer (7-ші нұсқадан бастап), әрбір жеке таңбаны бетте көрсету үшін қаріпті ақылмен таңдап, көптілді веб-беттерді көрсетуге қабілетті. Олар операциялық жүйеде тиісті қаріптер болған жағдайда, Юникод блоктарының кез келген комбинациясын дұрыс көрсетеді. Netscape Navigator 4.77 және Internet Explorer 6 сияқты ескі браузерлер тек беттің таңбалық кодтауымен байланысты ағымдағы қаріппен қолдау тапқан мәтінді көрсетуге қабілетті және сандық таңбалық сілтемелерді Юникод кодтық нүктелеріне сілтеме жасаудың орнына, ағымдағы таңбалық кодтауындағы кодтық мәндерге сілтеме ретінде қате түсіндіруі мүмкін. Мұндай браузерді пайдаланғанда, сіздің компьютеріңізде барлық осы қаріптер болуы мүмкін емес, немесе браузер бір беттегі барлық қол жетімді қаріптерді пайдалана алмайды. Нәтижесінде, браузер жоғарыдағы мысалдардағы мәтінді дұрыс көрсетпейді, бірақ олардың кіші топтамасын көрсетуі мүмкін. Олар стандартқа сәйкес кодталғандықтан, олар сәйкесті және қол жетімді таңбалары бар кез-келген жүйеде дұрыс көрсетіледі. Сонымен қатар, аталған тұлғаларға сілтеме жасау үшін аталған таңбалар басқаларға қарағанда көбірек таралған болуы мүмкін. Негізгі көптілді жазықтықтан тыс таңбаларды көрсету үшін, мысалы, готика әліпбиі faihu, ол жоғарыдағы кестедегі рундық fehu әрпінің нұсқасы, кейбір жүйелерге (Windows 2000 сияқты) олардың параметрлерін қолмен түзету қажет болуы мүмкін.

Пайдалану жиілігі

Google веб-индексінің ішкі деректеріне сәйкес, 2007 жылдың желтоқсанында UTF-8 Юникод кодировкасы веб-беттерде ең көп қолданылатын кодировка болып, ASCII (АҚШ) және 8859-1/1252 (Батыс Еуропа) кодировкаларын озып кетті.