КампутарыПраграмаванне

UTF-8 - кадоўка сімвалаў

Юнікод падтрымлівае практычна ўсе існуючыя наборы знакаў. Найлепшай формай кадавання набору знакаў Юнікода з'яўляецца UTF-8-кадоўка. У ёй рэалізавана сумяшчальнасць з ASCII, ўстойлівасць да скажэння дадзеных, эфектыўнасць і прастата апрацоўкі. Але пра ўсё па парадку.

формы кадавання

Кампутары аперуюць лічбамі не проста як абстрактнымі матэматычнымі аб'ектамі, а як камбінацыямі адзінак захоўвання і апрацоўкі інфармацыі фіксаванага памеру - байтаў і 32-разрадных слоў. Стандарт кадоўкі павінен гэта ўлічваць пры вызначэнні спосабу прадстаўлення сімвалаў лікамі.

У кампутарных сістэмах цэлыя лікі захоўваюцца ў вочках памяці памерам 8 біт (1 байт), 16 або 32 біт. Кожная форма кадавання Юнікода вызначае, якая паслядоўнасць вочак памяці ўяўляе цэлы лік, адпаведнае канкрэтнаму знаку. У стандарце прадстаўлены тры розныя формы кадавання сімвалаў Юнікода: 8, 16 і 32-бітнымі блокамі. Адпаведна, яны носяць назву UTF-8, UTF-16 і UTF-32. Назва UTF расшыфроўваецца як фармат пераўтварэнні Юнікода. Кожная з трох формаў кадавання з'яўляецца раўнапраўным сродкам ўяўлення знакаў Юнікода, мае перавагі ў розных галінах прымянення.

Дадзеныя кадоўкі могуць быць выкарыстаны для прадстаўлення ўсіх сімвалаў стандарту Юнікод. Такім чынам, яны цалкам сумяшчальныя для рашэнняў, па розных прычынах якія выкарыстоўваюць розныя формы кадавання. Кожная кадоўка можа быць адназначна ператворана ў любую з двух іншых без страты дадзеных.

прынцып неналожения

Кожная з формаў кадавання Юнікода распрацавана з улікам недапушчальнасці частковага накладання. Напрыклад, Windows-932 фармуе сімвалы з аднаго або двух байтаў кода. Даўжыня паслядоўнасці залежыць ад першага байта, таму значэння лідыруе байта ў паслядоўнасці з двух байтаў і адзіночнага байта не перасякаюцца. Аднак значэння адзіночнага байта і замыкальнага байта паслядоўнасці могуць супадаць. Гэта азначае, напрыклад, што пры пошуку сімвала D (код 44) можна памылкова знайсці яго ўваходзяць у другую частку паслядоўнасці з двух байтаў сімвала «Д» (код 84 44). Каб высветліць, якая паслядоўнасць з'яўляецца правільнай, праграма павінна ўлічыць папярэднія байты.

Сітуацыя ўскладніцца, калі вядучы і замыкае байт супадуць. Гэта значыць, што для зняцця неадназначнасці будзе праводзіцца зваротны пошук да дасягнення пачатку тэксту або адназначнай паслядоўнасці кода. Гэта не толькі неэфектыўна, але не абаронена ад магчымых памылак, бо досыць аднаго няправільнага байта, каб увесь тэкст еі стала нечытальным.

Фармат пераўтварэнні Юнікода дазваляе пазбегнуць гэтай праблемы, таму што значэння вядучай, якая замыкае і адзіночнай адзінкі захоўвання інфармацыі не супадаюць. Дзякуючы гэтаму ўсе кадоўкі Юнікода падыходзяць для пошуку і параўнання, ніколі не даючы памылковага выніку з-за супадзення розных частак кода знакаў. Той факт, што дадзеныя формы кадавання выконваюць прынцып неналожения, адрознівае іх ад іншых многобайтовых ўсходнеазіяцкіх кадовак.

Іншым аспектам непересечения кадовак Юнікода з'яўляецца тое, што кожны знак мае выразна вызначаныя межы. Пры гэтым адпадае неабходнасць у сканаванні нявызначанага колькасці папярэдніх знакаў. Дадзеную асаблівасць кадовак часам называюць самосинхронизацией. Скажэнне адной адзінкі кода ўвядзе да скажэння толькі аднаго знака, а навакольныя сімвалы застаюцца некранутымі. У 8-бітным фармаце пераўтварэнні, калі паказальнік спасылаецца на байт, які пачынаецца з 10xxxxxx (у двайковай кадоўцы), для пошуку пачатку сімвала спатрэбіцца ад аднаго да трох зваротных пераходаў.

ўзгодненасць

Кансорцыум Юнікода ў поўнай меры падтрымлівае ўсе 3 формы кадовак. Важна не супрацьпастаўляць UTF-8 і Юнікод, бо ўсе фарматы пераўтварэнні - аднолькава правамерныя увасаблення формаў кадавання сімвалаў стандарту Юнікод.

Байт-арыентацыя

Для прадстаўлення сімвала UTF-32 спатрэбіцца адна 32-бітная адзінка кода, якая супадае з кодам Юнікода. UTF-16 - ад адной да двух 16-бітных адзінак. А UTF-8 выкарыстоўвае да 4 байт.

Кадыроўка UTF-8 створана для сумяшчальнасці з байт-арыентаванымі сістэмамі на аснове ASCII. Большая частка існуючага праграмнага забеспячэння і практыка інфармацыйных тэхналогій працяглы час абапіраліся на прадстаўленне знакаў у выглядзе паслядоўнасці байтаў. Мноства пратаколаў залежыць ад нязменнасці кадоўкі ASCII і выкарыстоўвае альбо пазбягае спецыяльныя кіраўнікі сімвалы. Простым спосабам адаптаваць Юнікод да такіх сітуацыях можна, ужыўшы 8-бітнае кадаванне для ўяўлення знакаў Юнікода, эквівалентных любому знаку ASCII або кіраўніку знаку. Для гэтага і прызначана кадыроўка UTF-8.

пераменная даўжыня

UTF-8 - кадоўка зменнай даўжыні, якая складаецца з 8-бітных адзінак захоўвання інфармацыі, старэйшыя біты якіх абазначаюць, да якой часткі паслядоўнасці ставіцца кожны асобны байт. Адзін дыяпазон значэнняў адведзены для першага элемента паслядоўнасці кода, другі - для наступных. Гэта забяспечвае непересекаемость кадоўкі.

ASCII

UTF-8-кадоўка цалкам падтрымлівае коды ASCII (0x00-0x7F). Гэта значыць, што знакі Юнікода U + 0000-U + 007F канвертуецца ў адзіны байт 0x00-0x7F UTF-8 і такім чынам становяцца неадрознымі ад ASCII. Больш за тое, каб пазбегнуць шматзначнасці, значэння 0x00-0x7F не выкарыстоўваюцца больш ні ў адным байце ўяўлення знакаў Юнікода. Для кадавання неидеографических сімвалаў, выдатных ад ASCII, выкарыстоўваецца паслядоўнасць з двух байтаў. Сімвалы дыяпазону U + 0800-U + FFFF прадстаўлены трыма байтамі, а дадатковыя з кодамі больш U + FFFF патрабуюць чатырох байтаў.

вобласць прымянення

Кадоўцы UTF-8 звычайна аддаецца перавага ў пратаколе HTML і яму падобным.

XML стаў першым стандартам з поўнай падтрымкай кадыроўкі UTF-8. Арганізацыі, якія займаюцца стандартызацыяй, таксама яе рэкамендуюць. Праблема падтрымкі ў адрасах URL, выдатных ад ASCII-сімвалаў, была вырашана, калі кансорцыум W3С і інжынерная група IETF прыйшлі да пагаднення аб кадаванні ўсіх адрасоў URL выключна ў UTF-8.

Сумяшчальнасць з ASCII палягчае пераход да новага праграмным забеспячэнні. З UTF-8 працуе большасць тэкставых рэдактараў, у тым ліку JEdit, Emacs, BBEdit, Eclipse і "Нататнік" аперацыйнай сістэмы Windows. Ні адна іншая форма кадавання Юнікода не можа пахваліцца такой падтрымкай з боку інструментальных сродкаў.

Перавага кадоўкі заключаецца ў тым, што яна складаецца з паслядоўнасці байтаў. Са радкамі UTF-8 лёгка працаваць у C і іншых мовах праграмавання. Гэта адзіная форма кадавання, якая не патрабуе пазнакі парадку байтаў BOM або аб'яўлення кадоўкі ў XML.

Самосинхронизация

У асяроддзі, які выкарыстоўвае 8-бітную апрацоўку сімвалаў, у параўнанні з іншымі шматбайтавую кадыроўкамі, UTF-8 валодае наступнымі перавагамі:

  • Першы байт паслядоўнасці кода змяшчае інфармацыю аб яго даўжыні. Гэта павышае эфектыўнасць прамога пошуку.
  • Спрошчана знаходжанне пачатку сімвала, так як пачатковы байт абмежаваны фіксаваным дыяпазонам значэнняў.
  • Адсутнічае скрыжаванне значэнняў байтаў.

параўнанне пераваг

UTF-8-кадоўка кампактная. Але пры ўжыванні для кадавання ўсходнеазіяцкіх сімвалаў (кітайскіх, японскіх, карэйскіх, якія выкарыстоўваюць знакі кітайскага лісты) выкарыстоўваюцца 3-байтных паслядоўнасці. Таксама UTF-8-кадоўка саступае іншым формам кадавання па хуткасці апрацоўкі. А двайковая сартаванне радкоў дае той жа вынік, што і двайковая сартаванне Юнікода.

Схема кадыроўкі сімвалаў

Схема кадыроўкі сімвалаў складаецца з формы кадавання знакаў і спосабу пабайтную размяшчэння адзінак кода. Для вызначэння схемы кадавання стандартам Юнікода прадугледжана выкарыстанне пачатковай пазнакі парадку байтаў (BOM, Byte order mark).

Пры ўключэнні BOM ў UTF-8 функцыя пазнакі абмяжоўваецца толькі ўказаннем на выкарыстанне формы кадавання. Праблемы вызначэння парадку байтаў у UTF-8 няма, бо яе памер адзінкі кадавання роўны аднаму байце. Выкарыстанне BOM для дадзенай формы кадавання не з'яўляецца ні абавязковым, ні рэкамендаваным. BOM можа сустракацца ў тэкстах, канвертаваных з іншых кадовак, якія выкарыстоўваюць пазнаку парадку байтаў, або для сігнатуры кадоўкі UTF-8. Ўяўляе сабой паслядоўнасць з 3 байтаў EF 16 BB 16 BF 16.

Як задаць кадыроўку UTF-8

У HTML кадыроўка UTF-8 устанаўліваецца з дапамогай наступнага кода:

˂head˃

˂meta http-equiv = "Content-Type" content = "text / html; charset = utf-8" ˃

У PHP кадыроўка UTF-8 задаецца з дапамогай функцыі header () у самым пачатку файла пасля задання значэння ўзроўню вываду памылак:

˂? Php

error_reporting (-1);

header ( 'Content-Type: text / html; charset = utf-8');

Для падлучэння да баз дадзеных MySQL кадыроўка UTF-8 усталёўваецца так:

˂? Php

mysql_set_charset ( 'utf8');

У CSS-файлах кадоўка сімвалаў UTF-8 паказваецца так:

@charset "utf-8";

У выпадку захавання файлаў ўсіх тыпаў выбіраецца кадыроўка UTF-8 без BOM, інакш сайт працаваць не будзе. Для гэтага ў праграме DreamWeave трэба выбраць пункт меню «Мадыфікацыі - Уласцівасці старонкі - Загаловак / Кадыроўка», зьмяніць кадыроўку на UTF-8. Затым варта перазагрузіць старонку, прыбраць галачку з пункта «Падключыць Юнікод сігнатуры (BOM)» і прымяніць змены. Калі які-небудзь тэкст на старонцы або ў базе дадзеных быў уведзены іншы формай кадавання, то яго трэба ўвесці зноўку або перакадаваць. Пры працы з рэгулярнымі выразамі абавязкова выкарыстоўваць мадыфікатар u.

Таксама можна захаваць файл у кадоўцы UTF-8 у «Нататніку» АС Windows. Пасля выбару пункта меню «Файл - Захаваць як ...» усталяваць неабходную форму кадавання і захаваць файл у кадоўцы UTF-8.

У тэкставым рэдактары Notepad ++, калі кадыроўка выдатная ад UTF-8, праз пункт меню «Пераўтварыць у UTF-8 без BOM» зьмяніць кадыроўку і захаваць у кадоўцы UTF-8.

альтэрнатывы няма

Ва ўмовах глабалізацыі, калі палітычныя і моўныя межы сціраюцца, наборы знакаў, якія маюць мясцовыя асаблівасці, становяцца малапрыдатнымі. Юнікод з'яўляецца адзіным наборам знакаў з падтрымкай усіх лакалізацый. А UTF-8 - прыклад правільнай рэалізацыі Юнікода, якая:

  • падтрымлівае шырокі дыяпазон інструментальных сродкаў, у тым ліку сумяшчальнасць з кадоўкай ASCII;
  • валодае устойлівасцю да скажэння даных;
  • простая і эфектыўная пры апрацоўцы;
  • не залежыць ад платформы.

З з'яўленнем UTF-8 дыскусіі аб тым, якая форма кадавання або набор сімвалаў лепш, сталі бессэнсоўныя.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.birmiss.com. Theme powered by WordPress.