Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Kodimi Utf 8. Kodimi HTML

Vendosja e grupit të karaktereve

Etiketa meta

Ju duhet të shtoni një meta-etiketë të veçantë në secilën faqe (ose shabllon të kokës) që i tregon shfletuesit se cilin grup karakteresh të përdorë për të shfaqur tekstet. Ky etiketë është standard dhe zakonisht duket kështu:

grup karakteresh = UTF-8» />

charset = "utf-8 ″/> (opsioni për HTML 5)

Ju duhet ta futni atë në seksion - më mirë në fillim, menjëherë pas hapjes :

Etiketa e kodimit meta

Nëpërmjet .htaccess (nëse gjithçka tjetër dështon)

Zakonisht dy opsionet e para janë të mjaftueshme dhe shfletuesit shfaqin tekstin si të... Por me disa prej tyre mund të ketë probleme dhe për këtë arsye mund të drejtoheni për të ndihmuar skedar htaccess.

Për ta bërë këtë, duhet të shkruani rreshtin e mëposhtëm në të:

AddDefaultCharset utf-8

Kjo eshte e gjitha. Nëse aplikoni në mënyrë të njëpasnjëshme këto 3 metoda të vendosjes së kodimit në projektin tuaj, atëherë probabiliteti është që se gjithçka do të shfaqet ashtu siç duhet, afër 100%.

Si të "shihni" se çfarë fshihet pas simboleve të pakuptueshme në faqe?

Nëse keni shkuar në një faqe interneti, shihni "krakozyabry" dhe dëshironi të shihni tekst normal, atëherë ka vetëm dy mënyra:

  • informoni pronarin e faqes për të vendosur gjithçka siç duhet
  • përpiquni të merrni me mend vetë kodimin. Kjo bëhet duke përdorur mjete standarde të shfletuesit. Në Chrome, për shembull, duhet të klikoni në menu "Mjetet => Kodimi" dhe zgjidhni grupin e duhur të karaktereve nga lista e madhe (d.m.th. me mend).

Për fat të mirë, pothuajse të gjitha projektet moderne të ueb-it bëhen në UTF-8, i cili është "universal" për alfabete të ndryshme dhe për këtë arsye ka gjithnjë e më pak gjasa të shohim këto karaktere të paqarta në internet.

3 vota

Përshëndetje të dashur lexues të blogut tim. Sot do të flasim me ju rreth kodimit. Nëse e keni lexuar artikullin tim se si e dini që ndonjë dokument në internet nuk ruhet në formën në të cilën jemi mësuar ta shohim. Është shkruar duke përdorur simbole dhe shenja të pakuptueshme për njerëzit. Gjithçka është saktësisht e njëjtë me tekstin.

Ka disa kodime, dhe për këtë arsye, duke parë ndonjëherë karaktere të pakuptueshme kur hapni një libër në një aplikacion celular ose ngarkoni një artikull në sit, ju, pasi të keni ndryshuar disa vlera në cilësimet, do të shihni alfabetin e njohur për syrin.

Kodimi Windows-1251 - çfarë është, çfarë do të thotë kur krijoni një faqe në internet, cilat karaktere do të jenë të disponueshme dhe a është zgjidhja më e mirë sot? E gjithë kjo është në artikullin e sotëm. Si gjithmonë, me gjuhë të thjeshtë, sa më të qartë dhe me një minimum termash.

Pak teori

Çdo dokument në kompjuter ose në internet, siç thashë, ruhet si kod binar. Për shembull, nëse përdorni kodimin ASCII, shkronja "K" do të shkruhet si 10001010, dhe Windows 1251 fsheh simbolin - Љ nën këtë numër. Si rezultat, nëse një shfletues ose një program kthehet në një tabelë tjetër dhe lexon kodet e Windows 1251 në vend të ASCII, lexuesi do të shohë një simbol krejtësisht të pakuptueshëm për të.

Pyetja është logjike, për çfarë do të dilte me shumë tabela me kode? Fakti është se përveç alfabetit rus, ka edhe anglisht, gjermanisht dhe kinezisht. Sipas disa vlerësimeve, ka rreth 200,000 karaktere. Megjithëse, nuk u besoj vërtet këtyre statistikave, duke kujtuar japonezët.

Mos harroni se për shkronjat e mëdha dhe të vogla duhet të krijoni kodin tuaj, ka presje, vija, etj.

Sa më shumë simbole në tabelë, aq më i gjatë është kodi i secilit prej tyre, dhe për rrjedhojë pesha e dokumentit bëhet më e madhe.

Imagjinoni sikur një libër të peshonte 4 GB! Do të duhej një kohë shumë e gjatë për t'u ngarkuar, duke zënë të gjithë hapësirën e lirë në kompjuter. Vendimi për të shkarkuar do të ishte i vështirë.

Nëse mendoni për faqet e internetit, është përgjithësisht e frikshme të mendoni se çfarë do të kishte ndodhur. Çdo faqe hapet edhe në fibër me shpejtësi të lartë për më shumë se një orë! Unë mendoj se telefonat celularë mund të hidhen me siguri. Përdorimi i tyre në rrugë edhe me 4G? Dyshoj.

Për këto arsye, çdo programues në një kohë u përpoq të dilte me tabelën e tij të simboleve. Në mënyrë që të jetë i përshtatshëm për t'u përdorur dhe pesha të mbahet optimale.

Microsoft, për shembull, krijoi Windows-1251 për segmentin rusishtfolës. Sigurisht që ka meritat dhe të metat e veta. Si çdo produkt tjetër.

Tani, vetëm 2% e të gjitha faqeve në internet janë shkruar në 1251. Shumica e webmasterëve përdorin UTF-8. Pse eshte ajo?

Disavantazhet dhe avantazhet

UTF-8, ndryshe nga kodimi universal i Windows-1251, përmban shkronja të alfabeteve të ndryshme. Ekziston edhe UTF-128, ku në përgjithësi ka të gjitha gjuhët - Teulu, Suahili, Lao, Maltez, etj.

UTF-8 është më i varfër, shkronjat zënë shumë më pak hapësirë ​​dhe zënë vetëm një bajt memorie, si në 1251. UTP përmban karaktere të rralla nga gjuhë të tjera ose karaktere speciale. Ata peshojnë 5-6 bajt, por ato përdoren rrallë në dokument.

Ky kodim është më i menduar dhe për këtë arsye përdoret nga shumica e aplikacioneve si parazgjedhje. Kjo do të thotë, nëse nuk i tregoni programit se cilin kodim po përdorni, atëherë gjëja e parë që do të kontrollojë është UTF-8.

Kur krijoni një dokument html për një sajt, ju u tregoni shfletuesve se cilën tabelë duhet të shikojnë kur deshifrojnë regjistrimet.

Për ta bërë këtë, duhet të futni të dhënat e mëposhtme në etiketën e kokës. Pas karaktereve "charset =" vjen ose UTF ose Windows, si në shembullin më poshtë.

<meta http-equiv = përmbajtja "Lloji i përmbajtjes" = "tekst / html; grup karakteresh = windows-1251">

Nëse në të ardhmen dëshironi të ndryshoni diçka dhe të futni një frazë në shqip duke përdorur këtë tabelë deshifrimi, atëherë asgjë nuk do të funksionojë, sepse kodimi nuk e mbështet këtë gjuhë. UTF ‑ 8 do t'ju lejojë ta bëni këtë pa asnjë problem.

Nëse jeni të interesuar për krijimin e saktë të faqes, atëherë unë mund t'ju rekomandoj kursin e Mikhail Rusakov " Zhvillimi dhe promovimi i faqes së internetit nga A në Z ».


Ai përmban shumë - 256 mësime, prekëse, JavaScript dhe XML. Përveç gjuhëve të programimit, do të mund të kuptoni se si të fitoni para nga faqja, domethënë të merrni më shumë fitime më shpejt dhe më shumë. Një nga kurset e pakta që do të shpjegonte gjithçka që ju nevojitet me kaq detaje.

Unë vetë kam një vit që studioj në shkollën e blogerëve Alexander Borisov ... Duhet shumë herë më shumë kohë, fundi dhe skaji nuk duket ende, por nuk është më pak shterues dhe disiplinues. Motivon për të vazhduar zhvillimin.

Epo, nëse keni pyetje, nuk keni nevojë të kërkoni në internet. Gjithmonë ka një mentor kompetent.


Diçka kam devijuar nga tema. Le të kthehemi te kodimet.

Baza e të dhënave të banjës

Kur bëhet fjalë për php, gjithçka është e frikshme. Unë kam folur tashmë për bazat e të dhënave, ato përdoren për të shpejtuar punën e faqes. Zakonisht, ju nuk i kontaktoni ata, por kur lind nevoja për të transferuar faqen, bëhet e pakëndshme.

Vështirësitë i ndodhin të gjithëve, pavarësisht nga përvoja e punës, kohëzgjatja e shërbimit dhe kohëzgjatja e shërbimit. Disa faqe në bazën e të dhënave mund të përmbajnë të gjitha simbolet e disponueshme për Windows-1251, të tjera, për shembull, në shabllone faqesh, në një kodim tjetër.

Derisa të nevojitet transferimi, gjithçka funksionon dhe funksionon, edhe pse jo si duhet. Por pas lëvizjes fillojnë telashet. Në mënyrë ideale, duhet të përdorni ose vetëm UTF ose Windows-1251, por në fakt, të gjithë kanë gjithmonë mangësi të tilla.

Që deshifrimi të jetë konsistent, duhet të futni kodin mysql_query ("SET NAMES cp1251"). Në këtë rast, konvertimi do të kryhet duke përdorur një protokoll tjetër - cp1251.

Htaccess

Nëse vendosni vazhdimisht të përdorni 1251 në sit, atëherë duhet të gjeni ose krijoni një skedar htaccess. Ai është përgjegjës për cilësimet e konfigurimit. Do të duhet të shtoni tre rreshta të tjerë në mënyrë që gjithçka të përshtatet së bashku.

DefaultLanguage ru; AddDefaultCharset windows-1251; php_value default_charset "cp1251"

DefaultLanguage ru; AddDefaultCharset windows-1251; php_value default_charset "cp1251"

Unë ende rekomandoj shumë që të konsideroni përdorimin e UTF-8. Ai është më popullor, më i thjeshtë dhe më i pasur. Çfarëdo vendimi që merrni tani, është e rëndësishme që të mund të rregulloni gjithçka më vonë. Do të jetë shumë më e lehtë të shtoni një version në gjuhën angleze të faqes duke përdorur këtë kodim. Asgjë nuk duhet të rregullohet.

Vendimi është mbi ju. Regjistrohu në buletinin për të zbuluar sa më shpejt se ku të studiosh, në mënyrë që të mos përsëriten gabimet e njerëzve të tjerë, si dhe cilët blogerë marrin më shumë vizitorë.

Deri herën tjetër dhe suksese në përpjekjet tuaja.

(kodet nga 0 në 127), d.m.th. një bajt kodon shkronja latine, numra dhe karaktere speciale. Shkronjat ruse (cirilike) përfaqësohen nga kode 16-bit (dy bajt):

110XXXXXX 10XXXXXX,

ku X tregon shifra binare për vendosjen e kodit të karaktereve në përputhje me tabelën UNIKODI.

Unicode (anglisht Unicode) është një standard i kodimit të karaktereve që lejon që karakteret të përfaqësohen pothuajse në të gjitha gjuhët e shkruara. Karakteret e Unicode janë të koduara si numra të plotë të panënshkruar. Këta numra do të quhen kode karakteresh unicode ose thjesht UNIKODI... Unicode ka disa forma të paraqitjes së karaktereve në një kompjuter: UTF-8, UTF-16 (UTF-16BE, UTF-16LE) dhe UTF-32 (UTF-32BE, UTF-32LE)... (Formati i transformimit të Unicode në anglisht - UTF).

Konsideroni se si është koduar në UTF-8 letër F... Ajo UNIKODI- 1046 10 ose 0416 16 ose 10000 010110 2. UNIKODI në binar, ai ndahet në dy pjesë: pesë bit majtas dhe gjashtë bit djathtas. Ana e majtë është e mbushur në një bajt me një shenjë 110 kod me dy bajtë UTF-8: 110 10000. Dy bit janë caktuar në anën e djathtë 10 Shenja e vazhdimit të kodit shumëbajtë: 10 010110. Kodi i letrës së fundit F v UTF-8 duket kështu:

110 10000 10 010110 2
ose D0 96 16

Kështu, letra ruse është e koduar dy herë: së pari në 11-bit UNIKODI dhe më pas në UTF-8 16-bit.

Në tabelën e mëposhtme, përveç kodeve UNIKODI dhe UTF-8 në shënimin heksadecimal, jepen kodet UTF-8 në shënimin dhjetor dhe për krahasim kodet cirilike në kodim CP-1251, i quajtur ndryshe windovs-1251.

Tabela e kodeve cirilike UTF-8
SimboliUNIKODIUTF-8CP-1251
HeksDhjetëHeksDhjetë
A0410 1040 D090208 144 192
B0411 1041 D091208 145 193
V0412 1042 D092208 146 194
G0413 1043 D093208 147 195
D0414 1044 D094208 148 196
E0415 1045 D095208 149 197
F0416 1046 D096208 150 198
Z0417 1047 D097208 151 199
DHE0418 1048 D098208 152 200
Th0419 1049 D099208 153 201
TE041A1050 D09A208 154 202
L041B1051 D09B208 155 203
M041C1052 D09C208 156 204
N041D1053 D09D208 157 205
O041E1054 D09E208 158 206
P041F1055 D09F208 159 207
R0420 1056 D0A0208 160 208
ME0421 1057 D0A1208 161 209
T0422 1058 D0A2208 162 210
Kanë0423 1059 D0A3208 163 211
F0424 1060 D0A4208 164 212
X0425 1061 D0A5208 165 213
C0426 1062 D0A6208 166 214
H0427 1063 D0A7208 167 215
Sh0428 1064 D0A8208 168 216
SCH0429 1065 D0A9208 169 217
B042A1066 D0AA208 170 218
S042B1067 D0AB208 171 219
B042C1068 D0AC208 172 220
E042D1069 D0AD208 173 221
YU042E1070 D0AE208 174 222
UNË JAM042F1071 D0AF208 175 223
a0430 1072 D0B0208 176 224
b0431 1073 D0B1208 177 225
v0432 1074 D0B2208 178 226
G0433 1075 D0B3208 179 227
d0434 1076 D0B4208 180 228
e0435 1077 D0B5208 181 229
f0436 1078 D0B6208 182 230
s0437 1079 D0B7208 183 231
dhe0438 1080 D0B8208 184 232
th0439 1081 D0B9208 185 233
për të043A1082 D0BA208 186 234
l043B1083 D0BB208 187 235
m043C1084 D0BC208 188 236
n043D1085 D0BD208 189 237
O043E1086 D0BE208 190 238
P043F1087 D0BF208 191 239
R0440 1088 D180209 128 240
Me0441 1089 D181209 129 241
T0442 1090 D182209 130 242
0443 1091 D183209 131 243
f0444 1092 D184209 132 244
X0445 1093 D185209 133 245
c0446 1094 D186209 134 246
h0447 1095 D187209 135 247
w0448 1096 D188209 136 248
SCH0449 1097 D189209 137 249
b044A1098 D18A209 138 250
s044B1099 D18B209 139 251
b044C1100 D18C209 140 252
eh044D1101 D18D209 141 253
Ju044E1102 D18E209 142 254
unë jam044F1103 D18F209 143 255
Simbolet jashtë rregullit të përgjithshëm
Jo0401 1025 D001208 101 168
e0451 1025 D191209 145 184

Sot do të flasim me ju se nga vijnë krakozyabrët në faqe dhe në programe, cilat kodime teksti ekzistojnë dhe cilat duhet të përdoren. Le të shqyrtojmë në detaje historinë e zhvillimit të tyre, duke filluar nga ASCII bazë, si dhe versionet e tij të zgjeruara CP866, KOI8-R, Windows 1251 dhe duke përfunduar me kodimet moderne të konsorciumit Unicode UTF 16 dhe 8. Tabela e përmbajtjes:

  • Versione të zgjeruara të kodimeve Asuka - CP866 dhe KOI8-R
  • Windows 1251 - Variacioni ASCII dhe pse dalin krakozyabry
Për disa, ky informacion mund të duket i tepërt, por ju do ta dini se sa pyetje marr në lidhje me krakozyabrët e zvarritur (grup karakteresh jo të lexueshëm). Tani do të kem mundësinë t'i referoj të gjithë në tekstin e këtij artikulli dhe të gjej në mënyrë të pavarur bllokimet e mia. Epo, përgatituni të përthithni informacionin dhe përpiquni të ndiqni historinë.

ASCII - kodimi bazë i tekstit për latinisht

Zhvillimi i kodimeve të tekstit u zhvillua njëkohësisht me formimin e industrisë së IT, dhe gjatë kësaj kohe ata arritën të pësojnë mjaft ndryshime. Historikisht, gjithçka filloi me EBCDIC, i cili ishte mjaft jo eufonik në shqiptimin rus, gjë që bëri të mundur kodimin e shkronjave të alfabetit latin, numrave arabë dhe shenjave të pikësimit me karaktere kontrolli. Por megjithatë, pika fillestare për zhvillimin e kodimeve moderne të tekstit është e famshmja ASCII(Kodi standard amerikan për shkëmbimin e informacionit, i cili në rusisht zakonisht shqiptohet si "aski"). Ai përshkruan 128 karakteret e para më të përdorura nga përdoruesit anglishtfolës - shkronja latine, numra arabë dhe shenja pikësimi. Edhe këto 128 karaktere të përshkruara në ASCII përfshinin disa simbole shërbimi si kllapa, vija hash, yje, etj. Në fakt, ju vetë mund t'i shihni ato:
Janë këta 128 karaktere nga versioni origjinal ASCII që u bënë standardi dhe në çdo kodim tjetër me siguri do t'i përmbushni dhe do të qëndrojnë në atë renditje. Por fakti është se me ndihmën e një bajt informacioni, është e mundur të kodohen jo 128, por deri në 256 vlera të ndryshme (dy në fuqinë e tetë janë të barabartë me 256), prandaj, pas versionit bazë të Asuka , u shfaq një seri e tërë kodime të zgjeruara ASCII, në të cilën, përveç 128 karaktereve bazë, ishte e mundur të kodoheshin simbole të kodimit kombëtar (për shembull, rusisht). Këtu, ndoshta, vlen të thuhet pak më shumë për sistemet e numrave që përdoren në përshkrim. Së pari, siç e dini të gjithë, kompjuteri funksionon vetëm me numra në sistemin binar, përkatësisht me zero dhe njëshe ("algjebra Boolean", nëse dikush shkon në kolegj ose shkollë). Një bajt përbëhet nga tetë bit, secili prej të cilëve është dy në fuqi, duke filluar nga zero, dhe deri në dy në të shtatën:
Nuk është e vështirë të kuptohet se mund të ketë vetëm 256 kombinime të mundshme të zerove dhe njësheve në një ndërtim të tillë.Shndërrimi i një numri nga një sistem binar në një dhjetor është mjaft i thjeshtë. Thjesht duhet të shtoni të gjitha fuqitë e dyve mbi të cilat ka një. Në shembullin tonë, kjo është 1 (2 në fuqinë zero) plus 8 (dy në fuqinë 3), plus 32 (dy në fuqinë e pestë), plus 64 (në të gjashtën), plus 128 (në të shtatën). Totali merr 233 në shënimin dhjetor. Siç mund ta shihni, gjithçka është shumë e thjeshtë. Por nëse shikoni nga afër tabelën me karaktere ASCII, do të shihni se ato përfaqësohen në kodim heksadecimal. Për shembull, një yll korrespondon me numrin heksadecimal 2A në Asuka. Ju ndoshta e dini se në sistemin heksadecimal të numrave, përveç numrave arabë, përdoren edhe shkronja latine nga A (do të thotë dhjetë) në F (do të thotë pesëmbëdhjetë). Epo, për shndërroni numrin binar në heksadecimal përdorni metodën e mëposhtme të thjeshtë dhe intuitive. Çdo bajt informacioni ndahet në dy pjesë me katër bit, siç tregohet në pamjen e mësipërme të ekranit. Se. në çdo gjysmë bajt, vetëm gjashtëmbëdhjetë vlera (dy deri në fuqinë e katërt) mund të kodohen në binar, të cilat mund të përfaqësohen lehtësisht si një numër heksadecimal. Për më tepër, në gjysmën e majtë të bajtit, do të jetë e nevojshme të numëroni përsëri shkallët duke filluar nga zero, dhe jo siç tregohet në pamjen e ekranit. Si rezultat, me disa llogaritje të thjeshta, marrim se numri E9 është i koduar në pamjen e ekranit. Shpresoj që rrjedha e arsyetimit tim dhe zgjidhja e kësaj enigme doli të jetë e qartë për ju. Epo, tani le të vazhdojmë, në fakt, duke folur për kodimet e tekstit.

Versione të zgjeruara të kodimeve Asuka - CP866 dhe KOI8-R me pseudografikë

Pra, filluam të flasim për ASCII, i cili ishte, si të thuash, një pikënisje për zhvillimin e të gjitha kodimeve moderne (Windows 1251, Unicode, UTF 8). Fillimisht, ai përmbante vetëm 128 karaktere të alfabetit latin, numra arabë dhe diçka tjetër atje, por në versionin e zgjeruar u bë e mundur të përdoreshin të gjitha 256 vlerat që mund të kodohen në një bajt informacioni. ato. u bë e mundur të shtoni simbole të shkronjave të gjuhës suaj në Aski. Këtu do të jetë e nevojshme të largohemi edhe një herë për të sqaruar - pse na duhen fare kodimet e tekstit dhe pse është kaq e rëndësishme. Simbolet në ekranin e kompjuterit tuaj formohen në bazë të dy gjërave - grupe të formave vektoriale (përfaqësime) të të gjitha llojeve të karaktereve (ato janë në skedarët me fontet që janë instaluar në kompjuterin tuaj) dhe kodi që ju lejon të nxirre pikërisht atë nga ky grup i formave vektoriale (skedari i shkronjave) karakteri që do të futet në vendin e dëshiruar. Është e qartë se vetë shkronjat janë përgjegjëse për format vektoriale, por sistemi operativ dhe programet e përdorura në të janë përgjegjës për kodimin. ato. çdo tekst në kompjuterin tuaj do të jetë një grup bajtësh, secili prej të cilëve kodon një karakter të vetëm të këtij teksti. Programi që shfaq këtë tekst në ekran (redaktori i tekstit, shfletuesi, etj.), kur analizon kodin, lexon kodimin e karakterit tjetër dhe kërkon formën përkatëse vektoriale në skedarin e shkronjave të kërkuara, i cili është i lidhur për të shfaqur këtë dokument teksti. Gjithçka është e thjeshtë dhe e zakonshme. Kjo do të thotë që për të koduar çdo karakter që na nevojitet (për shembull, nga alfabeti kombëtar), duhet të plotësohen dy kushte - forma vektoriale e këtij karakteri duhet të jetë në fontin e përdorur dhe ky karakter mund të kodohet në kodime të zgjeruara ASCII në një bajt. Prandaj, ka një grup të tërë opsionesh të tilla. Ekzistojnë disa lloje të Asuka të zgjeruar vetëm për kodimin e karaktereve të gjuhës ruse. Për shembull, u shfaq fillimisht CP866, në të cilën ishte e mundur të përdoreshin karakteret e alfabetit rus dhe ishte një version i zgjeruar i ASCII. ato. pjesa e sipërme e saj përkoi plotësisht me versionin bazë të Asuka (128 karaktere latine, numra dhe çdo gjë tjetër), e cila është paraqitur në pamjen e ekranit pak më lart, por tashmë pjesa e poshtme e tabelës me kodimin CP866 kishte pamjen e treguar në pamjen e ekranit pak më poshtë dhe lejohet të kodojë 128 shenja të tjera (shkronja ruse dhe të gjitha llojet e pseudo-grafikave):
Shihni, në kolonën e djathtë, numrat fillojnë me 8, sepse numrat 0 deri në 7 i referohen pjesës bazë ASCII (shih pamjen e parë të ekranit). Se. shkronja ruse "M" në CP866 do të ketë kodin 9C (ai ndodhet në kryqëzimin e rreshtit përkatës me 9 dhe kolonën me numrin C në shënimin heksadecimal), i cili mund të shkruhet në një bajt informacioni, dhe nëse ekziston një font i përshtatshëm me karaktere ruse, kjo letër është pa probleme do të shfaqet në tekst. Nga ka ardhur kjo shumë? pseudografia në CP866? Çështja është se ky kodim për tekstin rus u zhvillua në ato vite me gëzof, kur nuk kishte një përhapje të tillë të sistemeve operative grafike siç është tani. Dhe në Dos, dhe sisteme të ngjashme operative të tekstit, pseudo-grafika bëri të mundur që disi të diversifikohej dizajni i teksteve dhe për këtë arsye CP866 dhe të gjithë bashkëmoshatarët e tij nga kategoria e versioneve të zgjeruara të Asuka janë të bollshme në të. CP866 u shpërnda nga IBM, por përveç kësaj, u zhvilluan një numër kodimesh për karakteret ruse, për shembull, ky lloj (ASCII i zgjeruar) mund t'i atribuohet KOI8-R:
Parimi i funksionimit të tij mbetet i njëjtë me atë të CP866 të përshkruar pak më herët - çdo karakter i tekstit është i koduar me një bajt të vetëm. Pamja e ekranit tregon gjysmën e dytë të tabelës KOI8-R, që nga ajo kohë gjysma e parë është plotësisht në përputhje me Asuka bazë, e cila tregohet në pamjen e parë të ekranit në këtë artikull. Ndër veçoritë e kodimit KOI8-R, mund të vërehet se shkronjat ruse në tabelën e tij nuk janë në rend alfabetik, siç bënë, për shembull, në CP866. Nëse shikoni pamjen e parë të ekranit (të pjesës bazë, e cila përfshihet në të gjitha kodimet e zgjeruara), do të vini re se në KOI8-R shkronjat ruse janë të vendosura në të njëjtat qeliza të tabelës si shkronjat e bashkëtingëllores së alfabetit latin. me ta nga pjesa e parë e tabelës. Kjo u bë për lehtësinë e kalimit nga karakteret ruse në shkronjat latine duke hedhur vetëm një bit (dy në fuqinë e shtatë ose 128).

Windows 1251 - versioni modern i ASCII dhe pse dalin krakozyabry

Zhvillimi i mëtejshëm i kodimeve të tekstit u shoqërua me faktin se sistemet operative grafike po fitonin popullaritet dhe nevoja për të përdorur pseudo-grafikë në to u zhduk me kalimin e kohës. Si rezultat, u ngrit një grup i tërë, të cilët në thelb ishin ende versione të zgjeruara të Asuka (një personazh i tekstit është i koduar me vetëm një bajt informacioni), por tashmë pa përdorimin e karaktereve pseudografike. Ato i përkisnin të ashtuquajturave kodime ANSI, të cilat u zhvilluan nga Instituti Amerikan i Standardeve. Në gjuhën e zakonshme, emri i alfabetit cirilik përdorej ende për versionin me mbështetje për gjuhën ruse. Një shembull i kësaj është Windows 1251... Ai ndryshonte në mënyrë të favorshme nga CP866 dhe KOI8-R të përdorura më parë në atë që vendin e simboleve pseudografike në të e zunë simbolet që mungonin të tipografisë ruse (përveç shenjës së theksit), si dhe simbolet e përdorura në gjuhët sllave. afër rusishtes (ukrainas, bjellorusisht, etj.)):
Për shkak të një bollëk të tillë të kodimeve në gjuhën ruse, prodhuesit e shkronjave dhe prodhuesit e softuerëve vazhdimisht kishin dhimbje koke, dhe ne, të dashur lexues, shpesh i dilnim nga ata famëkeq krakozyabry kur pati ngatërrim me versionin e përdorur në tekst. Shumë shpesh ata dilnin kur dërgonin dhe merrnin mesazhe me postë elektronike, gjë që përfshinte krijimin e tabelave shumë komplekse të konvertimit, të cilat, në fakt, nuk mund ta zgjidhnin rrënjësisht këtë problem, dhe shpesh përdoruesit për korrespondencë përdornin transliterimin e shkronjave latine për të shmangni krakozyabrovin famëkeq kur përdorimi i kodimeve ruse si CP866, KOI8-R ose Windows 1251. Në fakt, krakozyabry që zvarriteshin në vend të tekstit rus ishin rezultat i një përdorimi të gabuar të kodimit të kësaj gjuhe, i cili nuk përputhej ai në të cilin mesazhi me tekst ishte koduar fillimisht. Për shembull, nëse përpiqemi të shfaqim karakteret e koduara me CP866 duke përdorur tabelën e kodit të Windows 1251, atëherë do të dalin të njëjtat krakozyabry (grup karakteresh pa kuptim), duke zëvendësuar plotësisht tekstin e mesazhit. Një situatë e ngjashme ndodh shumë shpesh gjatë krijimit dhe konfigurimit të sajteve, forumeve ose blogjeve, kur teksti me karaktere ruse ruhet gabimisht në kodimin e gabuar që përdoret në sit si parazgjedhje, ose në redaktuesin e gabuar të tekstit që shton gagë të padukshme në kod. me sy të lirë. Në fund të fundit, një situatë e tillë me një mori kodimesh dhe krakoziabra që shfaqen vazhdimisht të lodhur nga shumë, kishte parakushte për krijimin e një variacioni të ri universal që do të zëvendësonte të gjitha ato ekzistuese dhe do të zgjidhte përfundimisht problemin rrënjësor të shfaqjes së teksteve të palexueshme. . Për më tepër, ekzistonte problemi i gjuhëve si kinezishtja, ku karakteret e gjuhës ishin shumë më tepër se 256.

Unicode - Kodimet universale UTF 8, 16 dhe 32

Këto mijëra karaktere nga grupi i gjuhëve të Azisë Juglindore nuk mund të përshkruheshin në një bajt informacioni, i cili u nda për kodimin e karaktereve në versionet e zgjeruara të ASCII. Si rezultat, u krijua një konsorcium i quajtur Unicode(Unicode - Unicode Consortium) me bashkëpunimin e shumë drejtuesve të industrisë së IT (ata që prodhojnë softuer, që kodojnë harduer, që krijojnë fontet) të cilët ishin të interesuar në shfaqjen e një kodimi universal të tekstit. Variacioni i parë i lëshuar nën kujdesin e konsorciumit Unicode ishte UTF 32... Numri në emrin e kodimit nënkupton numrin e biteve që përdoren për të koduar një karakter. 32 bit janë 4 bajtë informacion që do të nevojiten për të koduar një karakter të vetëm në kodimin e ri universal UTF. Si rezultat, i njëjti skedar me tekst të koduar në versionin e zgjeruar të ASCII dhe në UTF-32, në rastin e fundit, do të ketë madhësinë (peshën) katër herë më shumë. Kjo është e keqe, por tani kemi mundësinë të kodojmë numrin e karaktereve të barabartë me dy me fuqinë tridhjetë e dytë ( miliarda personazhe, e cila do të mbulojë çdo vlerë vërtet të nevojshme me një diferencë kolosale). Por shumë vende me gjuhë të grupit evropian nuk kishin nevojë të përdornin një numër kaq të madh karakteresh në kodim, por kur u përdor UTF-32, ata morën një rritje katërfish në peshën e dokumenteve të tekstit për asgjë, dhe si si rezultat, një rritje në vëllimin e trafikut të internetit dhe vëllimit të të dhënave të ruajtura. Kjo është shumë, dhe askush nuk mund të përballonte mbeturina të tilla. Si rezultat i zhvillimit të Unicode, UTF-16, i cili doli të ishte aq i suksesshëm saqë u pranua si parazgjedhje si hapësira bazë për të gjitha simbolet që përdorim. Ai përdor dy bajt për të koduar një karakter. Le të shohim se si duket ky rast. Në sistemin operativ Windows, mund të ndiqni rrugën "Start" - "Programs" - "Accessories" - "System Tools" - "Symbol Map". Si rezultat, do të hapet një tabelë me format vektoriale të të gjitha shkronjave të instaluara në sistemin tuaj. Nëse zgjidhni grupin e karaktereve Unicode në "Parametrat shtesë", do të mund të shihni për secilin font veçmas të gjithë gamën e karaktereve të përfshira në të. Nga rruga, duke klikuar në ndonjë prej tyre, mund të shihni dy bajtin e tij Kodi UTF-16 i përbërë nga katër shifra heksadecimal: Sa karaktere mund të kodohen në UTF-16 me 16 bit? 65536 (dy në fuqinë e gjashtëmbëdhjetë), dhe ishte ky numër që u mor si hapësira bazë në Unicode. Për më tepër, ka mënyra për të koduar me të dhe rreth dy milionë karaktere, por ishin të kufizuara në hapësirën e zgjeruar prej një milion karakteresh teksti. Por edhe ky version i suksesshëm i kodimit Unicode nuk u solli shumë kënaqësi atyre që shkruan, për shembull, programe vetëm në anglisht, sepse pas kalimit nga versioni i zgjeruar i ASCII në UTF-16, pesha e dokumenteve u dyfishua (një bajt për një karakter në Aski dhe dy bajt për të njëjtin karakter në UTP-16). Ishte pikërisht për kënaqësinë e të gjithëve dhe gjithçkaje në konsorciumin Unicode që u vendos të dalë me një kodim gjatësi të ndryshueshme. Ata e quajtën atë UTF-8. Pavarësisht numrit tetë në emër, ai me të vërtetë ka një gjatësi të ndryshueshme, d.m.th. çdo karakter në tekst mund të kodohet në një sekuencë prej një deri në gjashtë bajt. Në praktikë, në UTF-8, përdoret vetëm diapazoni nga një deri në katër bajt, sepse përtej katër bajteve të kodit, asgjë nuk është as teorikisht e mundur të imagjinohet. Të gjitha karakteret latine në të janë të koduara në një bajt, ashtu si në ASCII të mirë të vjetër. Ajo që vlen të përmendet, në rastin e kodimit vetëm të alfabetit latin, edhe ato programe që nuk kuptojnë Unicode do të lexojnë ende atë që është e koduar në UTF-8. ato. pjesa bazë e Asuka sapo kaloi në këtë ide të konsorciumit Unicode. Karakteret cirilike në UTF-8 janë të koduara në dy bajt, dhe, për shembull, ato gjeorgjiane - në tre bajtë. Konsorciumi Unicode, pasi krijoi UTF 16 dhe 8, zgjidhi problemin kryesor - tani kemi në fontet kanë një hapësirë ​​të vetme kodi... Dhe tani prodhuesit e tyre mund ta mbushin atë vetëm me forma vektoriale të simboleve të tekstit bazuar në pikat e forta dhe aftësitë e tyre. Në "Tabela e karaktereve" e mësipërme mund të shihni se fonte të ndryshëm mbështesin një numër të ndryshëm karakteresh. Disa fonte të pasura me Unicode mund të jenë shumë të rënda. Por tani ato ndryshojnë jo në atë që janë krijuar për kodime të ndryshme, por në atë që prodhuesi i fontit ka mbushur ose nuk ka mbushur një hapësirë ​​​​të vetme kodi me forma të caktuara vektoriale deri në fund.

Krakozyabry në vend të shkronjave ruse - si ta rregulloni

Le të shohim tani se si shfaqen krakozyabras në vend të tekstit, ose, me fjalë të tjera, si zgjidhet kodimi i saktë për tekstin rus. Në fakt, ai vendoset në programin në të cilin krijoni ose modifikoni pikërisht këtë tekst ose kod duke përdorur fragmente teksti. Për redaktimin dhe krijimin e skedarëve tekstualë, unë personalisht përdor një redaktues shumë të mirë, për mendimin tim, Html dhe PHP Notepad ++. Sidoqoftë, ai mund të nxjerrë në pah sintaksën e njëqind gjuhëve të tjera programimi dhe shënjimi, dhe gjithashtu ka aftësinë të zgjerohet duke përdorur shtojca. Lexoni një përmbledhje të detajuar të këtij programi të shkëlqyer në lidhjen e dhënë. Në menynë e sipërme të Notepad ++ ka një artikull "Encodings", ku do të mund të konvertoni versionin ekzistues në atë që përdoret si parazgjedhje në faqen tuaj:
Në rastin e një faqeje në Joomla 1.5 dhe më të lartë, si dhe në rastin e një blogu në WordPress, për të shmangur shfaqjen e çarjeve, zgjidhni opsionin UTF 8 pa BOM... Çfarë është prefiksi BOM? Fakti është se kur u zhvillua kodimi YUTF-16, për disa arsye ata vendosën t'i bashkëngjisin një gjë të tillë si aftësia për të shkruar një kod karakteri, si në sekuencë të drejtpërdrejtë (për shembull, 0A15) dhe në të kundërt (150A) . Dhe në mënyrë që programet të kuptojnë se në cilën sekuencë për të lexuar kodet, dhe u shpik BOM(Byte Order Mark ose, me fjalë të tjera, nënshkrimi), i cili u shpreh në shtimin e tre bajteve shtesë që në fillim të dokumenteve. Në kodimin UTF-8, asnjë BOM nuk parashikohet në konsorciumin Unicode, dhe për këtë arsye shtimi i një nënshkrimi (këto tre bajt shtesë më famëkeq në fillim të dokumentit) thjesht pengon disa programe të lexojnë kodin. Prandaj, gjatë ruajtjes së skedarëve në UTP, gjithmonë duhet të zgjedhim opsionin pa BOM (pa nënshkrim). Kështu që ju përparoni mbroni veten nga zvarritja jashtë krakozyabrov... Ajo që vlen të përmendet është se disa programe në Windows nuk mund ta bëjnë këtë (ata nuk mund të ruajnë tekstin në UTP-8 pa BOM), për shembull, Notepad famëkeq i Windows. Ai e ruan dokumentin në UTF-8, por gjithsesi shton një nënshkrim (tre bajtë shtesë) në fillim. Për më tepër, këto byte do të jenë gjithmonë të njëjta - lexoni kodin në sekuencë të drejtpërdrejtë. Por në serverë, për shkak të kësaj gjëje, mund të lindë një problem - krakozyabry do të dalë. Pra në asnjë mënyrë mos përdorni bllok shënimesh të zakonshme të Windows për redaktimin e dokumenteve të faqes tuaj, nëse nuk dëshironi pamjen e krakozyabrs. Opsioni më i mirë dhe më i thjeshtë, mendoj, është redaktori i përmendur tashmë Notepad ++, i cili praktikisht nuk ka të meta dhe përbëhet vetëm nga avantazhe. Në Notepad ++, kur zgjidhni një kodim, do të jeni në gjendje ta konvertoni tekstin në kodimin UCS-2, i cili në thelb është shumë afër standardit Unicode. Gjithashtu në Notepad do të mund të kodohet teksti në ANSI, d.m.th. në lidhje me gjuhën ruse do të përshkruhet tashmë nga ne pikërisht mbi Windows 1251. Nga vjen ky informacion? Është i regjistruar në regjistrin e sistemit tuaj operativ Windows - cilin kodim të zgjidhni në rastin e ANSI, cilin të zgjidhni në rastin e OEM (për gjuhën ruse do të jetë CP866). Nëse instaloni një gjuhë tjetër të paracaktuar në kompjuterin tuaj, atëherë këto kodime do të zëvendësohen me të ngjashme nga kategoria ANSI ose OEM për të njëjtën gjuhë. Pasi ta ruani dokumentin në kodimin që ju nevojitet në Notepad ++ ose të hapni dokumentin nga faqja për modifikim, mund ta shihni emrin e tij në këndin e poshtëm të djathtë të redaktuesit: Për të shmangur krakozyabrov, përveç veprimeve të përshkruara më lart, do të jetë e dobishme të shkruani informacione në lidhje me këtë kodim në kokën e kodit burimor të të gjitha faqeve të faqes në mënyrë që të mos ketë konfuzion në serverin ose hostin lokal. Në përgjithësi, në të gjitha gjuhët e shënjimit të hipertekstit përveç Html, përdoret një deklaratë e veçantë xml, e cila tregon kodimin e tekstit.< ? xml version= "1.0" encoding= "windows-1251" ? >Para se të fillojë analizimin e kodit, shfletuesi do të dijë se cili version është duke u përdorur dhe se si duhet të interpretohen saktësisht kodet e karaktereve të kësaj gjuhe. Por ajo që vlen të përmendet është se nëse e ruani dokumentin në unicode të paracaktuar, atëherë kjo deklaratë xml mund të hiqet (kodimi do të konsiderohet UTF-8 nëse nuk ka BOM ose YUTF-16 nëse ka një BOM). Në rastin e një dokumenti HTML, kodimi specifikohet Elementi meta, i cili shkruhet midis etiketave Head hapëse dhe mbyllëse: < head> . . . < meta charset= "utf-8" > . . . < / head>Kjo hyrje është krejt e ndryshme nga ajo e pranuar në standard në Html 4.01, por përputhet plotësisht me standardin e ri Html 5 që po prezantohet ngadalë dhe do të kuptohet 100% saktë nga çdo shfletues i përdorur aktualisht. Në teori, elementi Meta që tregon kodimin e dokumentit Html do të vendosej më mirë sa më lart që të jetë e mundur në kokën e dokumentit në mënyrë që në momentin e takimit të karakterit të parë në tekst që nuk është nga ANSI bazë (i cili lexohet gjithmonë saktë dhe në çdo variacion), shfletuesi duhet të ketë tashmë informacion se si të interpretojë kodet e këtyre karaktereve. Lidhja me të parën

Arsyeja për të kuptuar se si funksionon UTF-8 dhe çfarë është Unicode, ishte për faktin se VBScript nuk ka funksione të integruara për të punuar me UTF-8. Dhe meqenëse nuk gjeta asgjë që funksiononte, m'u desh të shkruaja / mbaroja së shkruari vetë. Përvoja, për mendimin tim, është e dobishme në çdo rast. Për një kuptim më të mirë, do të filloj me teorinë.

Rreth Unicode

Para ardhjes së Unicode, u përdorën gjerësisht kodimet 8-bit, disavantazhet kryesore të të cilave janë të dukshme:
  • Vetëm 255 karaktere, madje edhe atëherë disa prej tyre nuk janë grafike;
  • Mundësia për të hapur një dokument me një kodim tjetër në të cilin është krijuar;
  • Për çdo kodim duhet të krijohen shkronja.
Kështu u vendos që të krijohej një standard i vetëm për kodimin "të gjerë", i cili do të përfshinte të gjithë personazhet (dhe në fillim ata donin të përfshinin vetëm personazhe të zakonshëm në të, por më pas ndryshuan mendje dhe filluan të shtonin ato ekzotike). Unicode përdor 1,112,064 pika kodi (më shumë se 16 bit). Fillimi kopjon ASCII, dhe më pas pjesën e mbetur të alfabetit latin, cirilik, karaktere të tjera evropiane dhe aziatike. Për të përcaktuar simbolet, përdorni një shënim heksadecimal të formës "U + xxxx" për 65 mijë të parët dhe me një numër të madh shifrash për pjesën tjetër.

Rreth UTF-8

Dikur mendoja se ka Unicode dhe ka UTF-8. Më vonë kuptova se kisha gabuar.
UTF-8 është vetëm një paraqitje 8-bitëshe e Unicode. Karakteret me kode më të vogla se 128 përfaqësohen me një bajt dhe duke qenë se ata përsërisin ASCII në Unicode, teksti i shkruar vetëm me këto karaktere do të jetë tekst ASCII. Simbolet me kode nga 128 janë të koduara në 2 bajt, me kode nga 2048 - 3, nga 65536 - 4. Pra, do të ishte e mundur të arrini deri në 6 bajt, por nuk ka asgjë për të koduar me to.
0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Kodimi në UTF-8

Procedura është diçka si kjo:
  • Ne e kthejmë çdo karakter në Unicode.
  • Ne kontrollojmë nga cili karakter i diapazonit.
  • Nëse kodi i karakterit është më i vogël se 128, atëherë ne e shtojmë atë në rezultat të pandryshuar.
  • Nëse kodi i karakterit është më i vogël se 2048, atëherë marrim 6 bitët e fundit dhe 5 bitët e parë të kodit të karakterit. Shtoni 0xC0 në 5 bitët e parë dhe merrni bajtin e parë të sekuencës, dhe shtoni 0x80 në 6 bitet e fundit dhe merrni bajtin e dytë. Lidhni dhe shtoni rezultatit.
  • Në mënyrë të ngjashme, ne mund të vazhdojmë për kode të mëdha, por nëse karakteri është jashtë U + FFFF, do të duhet të merremi me surrogatët UTF-16.
Funksioni EncodeUTF8 (s) Dim i, c, utfc, b1, b2, b3 Për i = 1 në Len (s) c = ToLong (AscW (Mid (s, i, 1))) Nëse c< 128 Then utfc = chr(c) ElseIf c < 2048 Then b1 = c Mod &h40 b2 = (c - b1) / &h40 utfc = chr(&hC0 + b2) & chr(&h80 + b1) ElseIf c < 65536 And (c < 55296 Or c >57343) Pastaj b1 = c Mod & h40 b2 = ((c - b1) / & h40) Mod & h40 b3 = (c - b1 - (& h40 * b2)) / & h1000 utfc = chr (& hE0 + b3) & chr (& h80 + b2 ) & chr (& h80 + b1) Përndryshe "Zëvendësues i vogël ose i madh UTF-16 utfc = Chr (& hEF) & Chr (& hBF) & Chr (& hBD) Fundi Nëse EncodeUTF8 = EncodeUTF8 + Funksioni utfc Fundi tjetër Funksioni ToLong (intVal)< 0 Then ToLong = CLng(intVal) + &H10000 Else ToLong = CLng(intVal) End If End Function

Deshifroni UTF-8

  • Ne jemi duke kërkuar për karakterin e parë të formës 11xxxxxx
  • Ne numërojmë të gjitha bajtet pasuese të formës 10xxxxxx
  • Nëse një sekuencë prej dy bajtësh dhe bajt i parë është 110xxxxx, atëherë pritni parashtesat dhe shtoni, duke shumëzuar bajtin e parë me 0x40.
  • Po kështu për sekuenca më të gjata.
  • Ne zëvendësojmë të gjithë sekuencën me karakterin e dëshiruar të Unicode.
Dekodimi i funksionitUTF8 (s) Dim i, c, n, b1, b2, b3 i = 1 Bëj ndërsa i<= len(s) c = asc(mid(s,i,1)) If (c and &hC0) = &hC0 Then n = 1 Do While i + n <= len(s) If (asc(mid(s,i+n,1)) and &hC0) <>& h80 Pastaj dilni Do Fund nëse n = n + 1 Lak Nëse n = 2 dhe ((c dhe & hE0) = & hC0) Atëherë b1 = asc (mesi (s, i + 1,1)) dhe & h3F b2 = c dhe & h1F c = b1 + b2 * & h40 Elseif n = 3 dhe ((c dhe & hF0) = & hE0) Pastaj b1 = asc (mesi (s, i + 2,1)) dhe & h3F b2 = asc (mes (s, i + 1, 1)) dhe & h3F b3 = c dhe & h0F c = b3 * & H1000 + b2 * & H40 + b1 Përndryshe "Një karakter më i madh se U + FFFF ose një sekuencë e pavlefshme c = & hFFFD Fund nëse s = majtas (s, i-1) + chrw (c ) + mid (s, i + n) Elseif (c dhe & hC0) = & h80 atëherë "Bajt vazhdimi i papritur s = majtas (s, i- 1) + chrw (& hFFFD) + mesi (s, i + 1) Fundi Nëse i = i + 1 Dekodimi i ciklitUTF8 = s Funksioni i Fundit

Artikujt kryesorë të lidhur