Cum se configurează smartphone-uri și PC-uri. Portal informativ

Codificare UTF 8

Setați setul de caractere

Metaetichetă

Trebuie să adăugați o etichetă meta specială la fiecare pagină (sau șablon de antet) care să spună browserului ce set de caractere să folosească pentru a afișa texte. Această etichetă este standard și de obicei arată astfel:

set de caractere=UTF-8» />

set de caractere="utf-8"/> (opțiune pentru HTML 5)

Trebuie să-l lipiți în secțiune - mai bine la început, imediat după cea de deschidere :

Etichetă de metacodare

Prin .htaccess (dacă toate celelalte nu reușesc)

De obicei, primele două opțiuni sunt suficiente și browserele afișează textul cum să. Dar unii dintre ei pot avea probleme și de aceea poți apela la ajutor fișier .htaccess.

Pentru a face acest lucru, trebuie să scrieți următoarea linie în ea:

AddDefaultCharset utf-8

Asta e tot. Dacă aplicați secvențial aceste 3 metode de setare a codificării în proiectul dvs., atunci probabilitatea este că că totul va fi afișat așa cum trebuie, aproape de 100%.

Cum să „vezi” ce se ascunde în spatele simbolurilor ciudate pe un site web?

Dacă accesați o pagină web, vedeți „cuvinte nebunești” și doriți să vedeți text normal, atunci există doar două moduri:

  • informați proprietarul site-ului pentru ca totul să fie configurat corect
  • încercați să ghiciți singur codificarea. Acest lucru este făcut mijloace standard browsere. În Chrome, de exemplu, trebuie să faceți clic pe meniu „Instrumente => Codificare” iar din listă imensă alegeți setul potrivit de caractere (adică ghiciți).

Din fericire, aproape toate proiectele web moderne sunt realizate în codificare UTF-8, care este „universală” pentru diferite alfabete și, prin urmare, este din ce în ce mai puțin probabil să le vedeți. simboluri ciudateîn internet.

3 voturi

Bună ziua, dragi cititori ai blogului meu. Astăzi vă vom vorbi despre codificare. Dacă citiți articolul meu despre asta, atunci știți că orice document de pe Internet nu este stocat în forma în care suntem obișnuiți să-l vedem. Este scris folosind simboluri și semne de neînțeles pentru oameni. Este exact la fel cu textul.

Există mai multe codificări și, prin urmare, uneori văd caractere ciudate atunci când deschideți o carte aplicatie de mobil sau încărcând un articol pe site, vei vedea, prin modificarea unor valori din setări, alfabetul care este familiar ochiului.

Codificare Windows-1251 - ce este, ce semnificație are atunci când se creează un site web, ce caractere vor fi disponibile și este cea mai bună soluție până în prezent? Despre toate acestea în articolul de astăzi. Ca întotdeauna, într-un limbaj simplu, cât mai clară și cu un număr minim de termeni.

Puțină teorie

Orice document de pe un computer sau de pe Internet, așa cum am spus, este stocat sub formă de cod binar. De exemplu, dacă utilizați codificarea ASCII, atunci litera „K” va fi scrisă ca 10001010, iar în Windows 1251 simbolul – Љ este ascuns sub acest număr. Ca rezultat, dacă un browser sau un program accesează un alt tabel și contează în schimb coduri ASCII Windows 1251, atunci cititorul va vedea un simbol care este complet de neînțeles pentru el.

Întrebarea logică este, de ce să vă obosiți să veniți cu atâtea tabele cu coduri? Faptul este că, pe lângă alfabetul rus, există și engleză, germană și chineză. După unele estimări, există aproximativ 200.000 de caractere. Deși, nu prea am încredere în aceste statistici, amintindu-mi japoneză.

Nu uitați că pentru capital și litera mica trebuie să vii cu propriul tău cod, există virgule, liniuțe și așa mai departe.

Cu cât sunt mai multe simboluri în tabel, cu atât este mai lung codul pentru fiecare dintre ele, ceea ce înseamnă că greutatea documentului devine mai mare.

Imaginează-ți dacă o carte cântărește 4 GB! Ar dura foarte mult timp să se încarce, ar ocupa totul loc liber pe computer. Decizia de a descărca nu ar părea ușoară.

Dacă te gândești la site-uri web, este în general înfricoșător să te gândești la ce s-ar fi întâmplat. Fiecare pagină a durat mai mult de o oră pentru a se deschide chiar și pe fibră optică de mare viteză! Gândi, Celulare Aș putea să-l arunc în siguranță. Le poți folosi în aer liber chiar și cu 4G? Mă îndoiesc.

Din aceste motive, fiecare programator a încercat la un moment dat să vină cu propriul său tabel de simboluri. Pentru a facilita utilizarea și pentru a menține greutatea optimă.

Microsoft, de exemplu, a creat Windows-1251 pentru segmentul în limba rusă. Desigur, are avantajele și dezavantajele sale. La fel ca orice alt produs.

În zilele noastre, doar 2% din toate paginile de pe Internet sunt scrise în 1251. Majoritatea webmasterilor folosesc UTF-8. De ce este asta?

Dezavantaje și avantaje

UTF-8, spre deosebire de Windows-1251, este o codificare universală care conține litere de diferite alfabete. Există chiar și UTF-128, care conține toate limbile - Teulu, Swahili, Laoțiană, Malteză și așa mai departe.

UTF-8 este mai sărac, literele ocupă mult mai puțin spațiu și ocupă doar un octet de memorie, ca în 1251. UTF are simboluri rare din alte limbi sau Simboluri speciale. Acestea cântăresc 5-6 octeți fiecare, dar sunt utilizate extrem de rar în document.

Această codificare este mai atentă și, prin urmare, majoritatea aplicațiilor o folosesc implicit. Adică, dacă nu spuneți programului ce codificare utilizați, atunci primul lucru pe care îl va verifica este UTF-8.

Când creați un document HTML pentru un site web, le spuneți browserelor ce tabel să se uite atunci când decodificați înregistrările.

Pentru a face acest lucru, trebuie să introduceți eticheta de cap următoarele date. După simbolurile „charset=" vine fie UTF, fie Windows, ca în exemplul de mai jos.

<meta http-equiv = conținut „Tip de conținut” = „text/html; charset=windows-1251”>

Dacă pe viitor doriți să schimbați ceva și să introduceți o frază în albaneză folosind acest tabel de decodare, atunci nimic nu va funcționa, deoarece codificarea nu acceptă această limbă. UTF-8 vă va permite să faceți acest lucru fără probleme.

Dacă sunteți interesat creație corectă pe site, atunci vă pot recomanda cursul lui Mihail Rusakov „ Crearea și promovarea site-ului web de la A la Z ».


Conține multe - 256 de lecții care acoperă JavaScript și XML. Pe lângă limbajele de programare, vei putea înțelege cum să monetizezi un site, adică să faci mai mult profit mai rapid și mai mult. Unul dintre puținele cursuri care explică tot ce ai nevoie atât de detaliat.

Învăț de un an acum. la școala de bloggeri Alexander Borisov . Este nevoie de multe ori mai mult timp, finalul nu este încă la vedere, dar nu este mai puțin exhaustiv și disciplinat. Motivează să continue dezvoltarea.

Ei bine, dacă apar întrebări, nu este nevoie să căutați pe Internet. Întotdeauna există un mentor competent.


Cumva am iesit in afara subiectului. Să revenim la codificări.

Baze de date pentru baie

Când despre care vorbim despre php, totul este în general înfricoșător. Am vorbit deja despre bazele de date, acestea sunt folosite pentru a accelera site-ul. De obicei, nu apelați la ei, dar atunci când apare nevoia de a transfera un site, deveniți neliniştit.

Dificultățile se întâmplă tuturor, indiferent de experiența dvs. de muncă, de vechime sau de vechime. Unele pagini din baza de date pot conține toate caracterele disponibile pentru Windows 1251, altele, de exemplu, în șabloane de pagină, într-o codificare diferită.

Până când este nevoie de transfer, totul funcționează și funcționează, deși nu în totalitate corect. Dar după mutare, încep necazurile. În mod ideal, ar trebui să utilizați fie numai UTF, fie Windows 1251, dar, de fapt, astfel de deficiențe se întâmplă întotdeauna tuturor.

Pentru ca decriptarea să fie consecventă, trebuie să introduceți codul mysql_query ("SET NAMES cp1251"). În acest caz, conversia va fi efectuată folosind un alt protocol - cp1251.

htaccess

Dacă ați decis insistent să utilizați 1251 pe site, atunci ar trebui să găsiți sau să creați fișier htaccess. El este responsabil pentru setările de configurare. Va trebui să adaugi încă trei rânduri pentru ca totul să vină împreună.

DefaultLanguage ru; AddDefaultCharset windows-1251; php_value default_charset „cp1251”

DefaultLanguage ru; AddDefaultCharset windows-1251; php_value default_charset „cp1251”

Vă recomand în continuare să luați în considerare utilizarea UTF-8. Este mai popular, mai simplu și mai bogat. Indiferent de deciziile pe care le iei acum, este important să poți corecta totul mai târziu. Adăuga versiune în limba engleză un site web care folosește această codificare va fi mult mai ușor. Nimic nu trebuie reparat.

Decizia este la tine. Aboneaza-te la newsletter pentru a afla cat mai repede unde sa inveti pentru a nu repeta greselile altora, precum si care bloggeri primesc mai multi vizitatori.

Ne revedem și mult succes în demersurile tale.

(coduri de la 0 la 127), adică Literele, cifrele și caracterele speciale latine sunt codificate într-un octet. Literele rusești (chirilice) sunt reprezentate de coduri de 16 biți (dublu octet):

110XXXXXX 10XXXXXX,

unde X desemnează cifrele binare pentru plasarea codului caracterelor în conformitate cu tabelul UNICODE.

Unicode este un standard de codificare a caracterelor care vă permite să reprezentați caracterele din aproape toate limbile scrise. Caracterele reprezentate în Unicode sunt codificate ca numere întregi fără semn. Vom numi aceste numere coduri de caractere în Unicode sau pur și simplu UNICODE. Unicode are mai multe forme de reprezentare a caracterelor pe un computer: UTF-8, UTF-16 (UTF-16BE, UTF-16LE) și UTF-32 (UTF-32BE, UTF-32LE). (format de transformare Unicode engleză - UTF).

Să ne uităm la modul în care este codificat UTF-8 scrisoare ȘI. A ei UNICODE- 1046 10 sau 0416 16 sau 10000 010110 2. UNICODEîn formă binară este împărțit în două părți: cinci biți din stânga și șase biți din dreapta. Partea stângă este completată cu un octet cu atributul 110 cod pe dublu octet UTF-8: 110 10000. Doi biți sunt alocați în partea dreaptă 10 semn de continuare a codului multioctet: 10 010110. Cod litera final ȘI V UTF-8 arata asa:

110 10000 10 010110 2
sau D0 96 16

Astfel, litera rusă este codificată de două ori: mai întâi pe 11 biți UNICODE, iar apoi la UTF-8 pe 16 biți.

În tabelul de mai jos, pe lângă coduri UNICODEȘi UTF-8în sistemul numeric hexazecimal, sunt date coduri UTF-8 V sistem zecimal notație și pentru comparație coduri chirilice în codificare CP-1251, altfel numit Windows-1251.

Tabel de coduri chirilice în UTF-8
SimbolUNICODEUTF-8CP-1251
Hex.ZeceHex.Zece
A0410 1040 D090208 144 192
B0411 1041 D091208 145 193
ÎN0412 1042 D092208 146 194
G0413 1043 D093208 147 195
D0414 1044 D094208 148 196
E0415 1045 D095208 149 197
ȘI0416 1046 D096208 150 198
Z0417 1047 D097208 151 199
ȘI0418 1048 D098208 152 200
Y0419 1049 D099208 153 201
LA041A1050 D09A208 154 202
L041B1051 D09B208 155 203
M041C1052 D09C208 156 204
N041D1053 D09D208 157 205
DESPRE041E1054 D09E208 158 206
P041F1055 D09F208 159 207
R0420 1056 D0A0208 160 208
CU0421 1057 D0A1208 161 209
T0422 1058 D0A2208 162 210
U0423 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
Kommersant042A1066 D0AA208 170 218
Y042B1067 D0AB208 171 219
b042C1068 D0AC208 172 220
E042D1069 D0AD208 173 221
YU042E1070 D0AE208 174 222
eu042F1071 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
și0436 1078 D0B6208 182 230
h0437 1079 D0B7208 183 231
Și0438 1080 D0B8208 184 232
th0439 1081 D0B9208 185 233
La043A1082 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
Cu0441 1089 D181209 129 241
T0442 1090 D182209 130 242
la0443 1091 D183209 131 243
f0444 1092 D184209 132 244
X0445 1093 D185209 133 245
ts0446 1094 D186209 134 246
h0447 1095 D187209 135 247
w0448 1096 D188209 136 248
sch0449 1097 D189209 137 249
ъ044A1098 D18A209 138 250
s044B1099 D18B209 139 251
b044C1100 D18C209 140 252
uh044D1101 D18D209 141 253
Yu044E1102 D18E209 142 254
eu044F1103 D18F209 143 255
Simboluri în afara regulii generale
Eu0401 1025 D001208 101 168
e0451 1025 D191209 145 184

Astăzi vă vom vorbi despre de unde provin fisurile de pe site și din programe, ce codificări de text există și care ar trebui folosite. Să aruncăm o privire mai atentă asupra istoriei dezvoltării lor, pornind de la ASCII de bază, precum și versiunile sale extinse CP866, KOI8-R, Windows 1251 și terminând cu codificări moderne ale consorțiului Unicode UTF 16 și 8. Cuprins:

  • Versiuni extinse de Asuka - codificări CP866 și KOI8-R
  • Windows 1251 - Varianta ASCII și de ce iese krakozyabry
Pentru unii, această informație poate părea inutilă, dar știți câte întrebări primesc în mod specific cu privire la krakozyabrs (setul de caractere imposibil de citit). Acum voi avea ocazia să trimit tuturor la textul acestui articol și să-mi găsesc propriile greșeli. Ei bine, pregătiți-vă să absorbiți informațiile și încercați să urmăriți fluxul poveștii.

ASCII - codificarea de bază a textului pentru alfabetul latin

Dezvoltarea codificărilor de text a avut loc concomitent cu formarea industriei IT, iar în acest timp au reușit să sufere destul de multe schimbări. Din punct de vedere istoric, totul a început cu EBCDIC, care era destul de disonantă în pronunția rusă, ceea ce a făcut posibilă codificarea literelor alfabet latin, cifre arabe și semne de punctuație cu caractere de control. Dar totuși, punctul de plecare pentru dezvoltarea codificărilor moderne de text ar trebui considerat celebrul ASCII (Standard american Cod pentru Schimbul de informații, care în rusă este de obicei pronunțat „aski”). Descrie primele 128 de caractere utilizate cel mai frecvent de utilizatorii vorbitori de limba engleză - litere latine, cifre arabe și semne de punctuație. Aceste 128 de caractere descrise în ASCII au inclus și unele caractere de serviciu, cum ar fi paranteze, semne hash, asteriscuri etc. De fapt, le puteți vedea singur:
Aceste 128 de caractere din versiunea originală ASCII au devenit standard, iar în orice altă codificare le veți găsi cu siguranță și vor apărea în această ordine. Dar adevărul este că cu un octet de informații poți codifica nu 128, ci până la 256 sensuri diferite(doi la puterea lui opt este egal cu 256), deci urmează versiunea de bază A apărut o serie întreagă de Asuka codificări ASCII extinse, în care, pe lângă 128 de caractere de bază, a fost posibilă și codificarea simbolurilor codificării naționale (de exemplu, rusă). Aici, probabil că merită să spunem puțin mai multe despre sistemele de numere care sunt utilizate în descriere. În primul rând, după cum știți cu toții, un computer funcționează numai cu numere în sistemul binar, și anume cu zerouri și cu unu („ algebră booleană”, dacă cineva a mers la facultate sau la școală). Un octet este format din opt biți, fiecare dintre care o putere a doi, începând de la zero și terminând cu doi până la a șaptea putere:
Nu este greu de înțeles că toate combinațiile posibile de zerouri și unu într-o astfel de construcție pot fi doar 256. Convertiți un număr din sistem binar la zecimală este destul de simplu. Trebuie doar să aduni toate puterile a doi cu una deasupra lor. În exemplul nostru, acesta se dovedește a fi 1 (2 la puterea lui zero) plus 8 (două la puterea lui 3), plus 32 (două la puterea a cincea), plus 64 (la puterea a șasea), plus 128 (la puterea a saptea). Totalul este 233 în notație zecimală. După cum puteți vedea, totul este foarte simplu. Dar dacă te uiți îndeaproape la tabelul cu caractere ASCII, vei vedea că acestea sunt reprezentate în codificare hexazecimală. De exemplu, potrivirile „asterisc” în Aski număr hexazecimal 2A. Probabil știi asta în sistem hexazecimal Numerele sunt folosite pe lângă cifrele arabe și literele latine de la A (înseamnă zece) la F (înseamnă cincisprezece). Ei bine, atunci, pentru traducere număr binar la hexazecimal recurge la următoarea metodă simplă și evidentă. Fiecare octet de informații este împărțit în două părți de patru biți, așa cum se arată în captura de ecran de mai sus. Acea. în fiecare jumătate de octet cod binar doar șaisprezece valori pot fi codificate (de la două până la a patra putere), care pot fi ușor reprezentate ca număr hexazecimal. Mai mult, în jumătatea stângă a octetului, gradele vor trebui să fie numărate din nou începând de la zero și nu așa cum se arată în captura de ecran. Drept urmare, prin calcule simple, obținem că numărul E9 este codificat în captură de ecran. Sper că cursul raționamentului meu și soluția acestui puzzle v-au fost clare. Ei bine, acum să continuăm, de fapt, să vorbim despre codificări de text.

Versiuni extinse de Asuka - codificări CP866 și KOI8-R cu pseudografice

Așadar, am început să vorbim despre ASCII, care a fost, parcă, punctul de plecare pentru dezvoltarea tuturor codificărilor moderne (Windows 1251, Unicode, UTF 8). Inițial, conținea doar 128 de caractere din alfabetul latin, cifre arabe și altceva, dar în versiunea extinsă a devenit posibilă utilizarea tuturor celor 256 de valori care pot fi codificate într-un octet de informații. Acestea. A devenit posibil să adăugați simboluri ale literelor limbii dvs. la Aski. Aici va trebui să ne abatem din nou pentru a explica - De ce avem nevoie de codificări de text?și de ce este atât de important. Caracterele de pe ecranul computerului sunt formate pe baza a două lucruri - seturi de forme vectoriale (reprezentări) de tot felul de caractere (sunt în fișiere cu fonturi care sunt instalate pe computer) și cod care vă permite să scoateți exact acela din acest set de forme vectoriale (simbol de font care va trebui introdus la locul potrivit). Este clar că fonturile în sine sunt responsabile pentru formele vectoriale, dar sistemul de operare și programele utilizate în el sunt responsabile pentru codificare. Acestea. orice text de pe computer va fi un set de octeți, fiecare dintre care codifică un singur caracter al acestui text. Programul care afișează acest text pe ecran (editor de text, browser etc.), atunci când parsează codul, citește codificarea următorului caracter și caută forma vectorială corespunzătoare în fișierul necesar font care este conectat pentru a afișa acest document text. Totul este simplu și banal. Aceasta înseamnă că pentru a codifica orice caracter de care avem nevoie (de exemplu, din alfabetul național), trebuie îndeplinite două condiții - forma vectorială a acestui caracter trebuie să fie în fontul folosit și acest caracter ar putea fi codificat în codificări ASCII extinse în un octet. Prin urmare, există o mulțime de astfel de opțiuni. Doar pentru codificarea caracterelor în limba rusă, există mai multe varietăți de Aska extins. De exemplu, a apărut inițial CP866, care avea capacitatea de a folosi caractere din alfabetul rus și era o versiune extinsă a ASCII. Acestea. a ei top parte a coincis complet cu versiunea de bază a lui Asuka (128 de caractere latine, numere și alte prostii), care este prezentată în captura de ecran de mai sus, dar acum Partea de jos tabelele cu codificare CP866 aveau forma afișată în captura de ecran de mai jos și vă permiteau să codificați încă 128 de caractere (litere rusești și tot felul de pseudo-grafice):
Vedeți, în coloana din dreapta numerele încep cu 8, pentru că... numerele de la 0 la 7 se referă la partea de bază a ASCII (vezi prima captură de ecran). Acea. litera rusă „M” din CP866 va avea codul 9C (este situată la intersecția rândului corespunzător cu 9 și a coloanei cu numărul C în sistemul numeric hexazecimal), care poate fi scris într-un octet de informații și dacă există un font potrivit cu caractere rusești, această scrisoare fără probleme va apărea în text. De unde aceasta suma? pseudografic în CP866? Ideea este că această codificare pentru textul rusesc a fost dezvoltată în acei ani greșiți, când sistemele de operare grafică nu erau atât de răspândite ca acum. Și în Dosa și sisteme de operare cu text similare, pseudografica a făcut posibilă cel puțin diversificarea designului textelor și, prin urmare, CP866 și toți ceilalți colegi din categoria versiunilor extinse ale Asuka abundă în el. CP866 a fost distribuit de IBM, dar în plus, au fost dezvoltate o serie de codificări pentru caracterele în limba rusă, de exemplu, același tip (ASCII extins) poate fi atribuit KOI8-R:
Principiul funcționării sale rămâne același cu cel al CP866 descris puțin mai devreme - fiecare caracter al textului este codificat de un singur octet. Captura de ecran arată a doua jumătate a tabelului KOI8-R, deoarece prima jumătate este complet în concordanță cu Asuka de bază, care este afișată în prima captură de ecran din acest articol. Printre caracteristicile codificării KOI8-R, se poate remarca faptul că literele rusești din tabelul său nu intră în ordine alfabetică, așa cum au făcut, de exemplu, în CP866. Dacă vă uitați la prima captură de ecran (a părții de bază, care este inclusă în toate codificările extinse), veți observa că în KOI8-R literele rusești sunt situate în aceleași celule ale tabelului ca și literele corespunzătoare ale alfabetului latin din prima parte a tabelului. Acest lucru a fost făcut pentru comoditatea trecerii de la caracterele rusești la caractere latine, eliminând doar un bit (două la a șaptea putere sau 128).

Windows 1251 - versiunea modernă de ASCII și de ce apar fisurile

Dezvoltarea în continuare a codificărilor de text s-a datorat faptului că sistemele de operare grafică câștigau popularitate și nevoia de a folosi pseudografice în ele a dispărut în timp. Ca urmare, a apărut un întreg grup care, în esență, erau încă versiuni extinse ale Asuka (un caracter al textului este codificat cu doar un octet de informații), dar fără utilizarea simbolurilor pseudografice. Ele aparțineau așa-numitelor codificări ANSI, care au fost dezvoltate de Institutul American de Standarde. În limbajul comun, numele chirilic a fost folosit și pentru versiunea cu suport pentru limba rusă. Un exemplu în acest sens ar fi Windows 1251. S-a diferențiat în mod favorabil de CP866 și KOI8-R utilizate anterior prin faptul că locul simbolurilor pseudografice în el a fost luat de simbolurile lipsă ale tipografiei ruse (cu excepția semnului de accent), precum și de simbolurile utilizate în limbile slave apropiate de Rusă (ucraineană, belarusă etc.):
Datorită unei astfel de abundențe de codificări în limba rusă, producătorii și producătorii de fonturi software durerile de cap au apărut în mod constant, iar tu și cu mine, dragi cititori, de multe ori am primit aceleași notorii krakozyabry când a existat confuzie cu versiunea folosită în text. Foarte des au apărut la trimiterea și primirea mesajelor prin e-mail, care a presupus crearea unor tabele de conversie foarte complexe, care, de fapt, nu au putut rezolva în mod fundamental această problemă, iar utilizatorii au folosit adesea transliterarea pentru corespondență litere latine pentru a evita erorile notorii atunci când se utilizează codificări rusești precum CP866, KOI8-R sau Windows 1251. De fapt, erorile care apar în locul textului rusesc au fost rezultatul utilizării incorecte a codificării a acestei limbi, care nu se potrivea cu cel în care a fost codificat mesaj text inițial. De exemplu, dacă încercați să afișați caractere codificate folosind CP866 folosind tabelul de coduri Windows 1251, atunci vor apărea aceleași farfurii (un set de caractere fără sens), înlocuind complet textul mesajului. O situație similară apare foarte des atunci când se creează și se creează site-uri web, forumuri sau bloguri, atunci când textul cu caractere rusești este salvat din greșeală într-o codificare greșită care este utilizată implicit pe site sau într-o codificare greșită editor de text, care adaugă călușuri la cod care nu sunt vizibile cu ochiul liber. În cele din urmă, mulți oameni s-au săturat de această situație cu o mulțime de codificări și încontinuu porcării, iar premisele au apărut pentru crearea unei noi variante universale care să le înlocuiască pe toate pe cele existente și să rezolve în sfârșit problema cu aspectul. a textelor ilizibile. În plus, a fost problema limbilor precum chineza, unde erau mult mai multe caractere de limbă decât 256.

Unicode - codificări universale UTF 8, 16 și 32

Aceste mii de caractere ale grupului de limbi din Asia de Sud-Est nu au putut fi descrise într-un octet de informații care au fost alocate pentru codificarea caracterelor în versiunile extinse de ASCII. Ca urmare, a fost creat un consorțiu numit Unicode(Unicode - Unicode Consortium) cu colaborarea multor lideri din industria IT (cei care produc software, care codifică hardware, care creează fonturi), care au fost interesați de apariția unei codări universale de text. Prima variantă lansată sub auspiciile Consorțiului Unicode a fost UTF 32. Numărul din numele de codificare înseamnă numărul de biți care sunt utilizați pentru a codifica un caracter. 32 de biți echivalează cu 4 octeți de informații care vor fi necesari pentru a codifica un singur caracter în noua codificare UTF universală. Ca rezultat, același fișier cu text codificat în ASCII extins și UTF-32, în acest din urmă caz va avea dimensiunea (greutatea) de patru ori mai mare. Acest lucru este rău, dar acum avem posibilitatea de a codifica folosind YTF un număr de caractere egal cu două la puterea de treizeci de secunde ( miliarde de caractere, care va acoperi orice valoare cu adevărat necesară cu o marjă colosală). Dar pentru multe țări cu limbi ale grupului european acest lucru o cantitate mare Nu a fost deloc nevoie să folosiți caractere în codificare, dar atunci când a fost folosit UTF-32, acestea nu ar fi primit niciodată o creștere de patru ori în greutate. documente text, și ca urmare, o creștere a volumului de trafic pe Internet și a cantității de date stocate. Este mult și nimeni nu și-ar putea permite o astfel de risipă. Ca urmare a dezvoltării Unicode, UTF-16, care s-a dovedit a fi atât de reușit încât a fost adoptat implicit ca spațiu de bază pentru toate caracterele pe care le folosim. Folosește doi octeți pentru a codifica un caracter. Să vedem cum arată chestia asta. În sistemul de operare Windows, puteți urma calea „Start” - „Programe” - „Accesorii” - „Instrumente de sistem” - „Tabel de caractere”. Ca rezultat, se va deschide un tabel cu formele vectoriale ale tuturor fonturilor instalate pe sistemul dumneavoastră. Dacă selectați în „ Opțiuni suplimentare» set de caractere Unicode, puteți vedea pentru fiecare font separat întreaga gamă de caractere incluse în acesta. Apropo, făcând clic pe oricare dintre ele, îi puteți vedea pe doi octeți cod în format UTF-16, format din patru cifre hexazecimale: Câte caractere pot fi codificate în UTF-16 folosind 16 biți? 65.536 (doi la puterea lui șaisprezece), iar acesta este numărul care a fost adoptat ca spațiu de bază în Unicode. În plus, există modalități de a codifica aproximativ două milioane de caractere folosindu-l, dar acestea au fost limitate la un spațiu extins de un milion de caractere de text. Dar nici această versiune de succes a codificării Unicode nu a adus prea multe satisfacții celor care au scris, de exemplu, programe doar în Limba engleză, deoarece după trecerea de la versiunea extinsă a ASCII la UTF-16, greutatea documentelor s-a dublat (un octet pe caracter în Aski și doi octeți pe același caracter în UTF-16). Tocmai pentru satisfacția tuturor și a tuturor celor din consorțiul Unicode s-a decis vin cu o codificare lungime variabilă. Se numea UTF-8. În ciuda celor opt din titlu, chiar a făcut-o lungime variabilă, adică Fiecare caracter al textului poate fi codificat într-o secvență de la unu până la șase octeți. În practică, UTF-8 folosește doar intervalul de la unu la patru octeți, deoarece dincolo de patru octeți de cod nu mai este nici măcar posibil teoretic să ne imaginăm ceva. Toate caracterele latine din el sunt codificate într-un octet, la fel ca în vechiul ASCII. Ceea ce este de remarcat este că în cazul codificării numai a alfabetului latin, chiar și acele programe care nu înțeleg Unicode vor citi în continuare ceea ce este codificat în YTF-8. Acestea. partea centrală a Asuka a fost pur și simplu transferată în această creație a consorțiului Unicode. Caracterele chirilice în UTF-8 sunt codificate în doi octeți și, de exemplu, cele georgiane - în trei octeți. Consorțiul Unicode, după ce a creat UTF 16 și 8, a rezolvat principala problemă - acum avem fonturile au un singur spațiu de cod. Și acum producătorii lor îl pot completa doar cu forme vectoriale de caractere text pe baza punctelor forte și a capacităților lor. În „Tabelul de caractere” de mai sus puteți vedea că sunt acceptate diferite fonturi cantități diferite semne. Unele fonturi bogate în Unicode pot fi destul de grele. Dar acum ele diferă nu prin faptul că au fost create pentru diferite codificări, ci prin faptul că producătorul fontului a umplut sau nu complet spațiul unic de cod cu anumite forme vectoriale.

Cuvinte nebunești în loc de litere rusești - cum să o rezolvi

Să vedem acum cum apar krakozyabrurile în loc de text sau, cu alte cuvinte, cum este selectată codificarea corectă pentru textul rusesc. De fapt, este setat în programul în care creați sau editați acest text sau codați folosind fragmente de text. Pentru editare și creare fișiere text Personal, folosesc un editor foarte bun, după părerea mea, Html și PHP Notepad++. Cu toate acestea, poate evidenția și sintaxa o sută bună limbaje de programare și de marcare și, de asemenea, are capacitatea de a fi extins folosind plugin-uri. Citit revizuire detaliată acest program minunat la link-ul oferit. ÎN meniul de sus Notepad++ are un element „Codări”, unde veți avea posibilitatea de a converti o opțiune existentă în cea utilizată implicit pe site-ul dvs.:
În cazul unui site pe Joomla 1.5 și versiuni ulterioare, precum și în cazul unui blog pe WordPress, ar trebui să selectați opțiunea pentru a evita apariția fisurilor UTF 8 fără BOM. Care este prefixul BOM? Faptul este că, atunci când dezvoltau codificarea YUTF-16, din anumite motive au decis să-i atașeze un astfel de lucru, cum ar fi capacitatea de a scrie codul caracterelor atât în ​​secvență directă (de exemplu, 0A15), cât și invers (150A). . Și pentru ca programele să înțeleagă exact în ce secvență să citească codurile, a fost inventat BOM(Byte Order Mark sau, cu alte cuvinte, semnătură), care a fost exprimată prin adăugarea a trei octeți suplimentari chiar la începutul documentelor. În codificarea UTF-8, consorțiul Unicode nu prevedea BOM-uri și, prin urmare, adăugarea unei semnături (acei trei octeți suplimentari notori la începutul documentului) împiedică pur și simplu unele programe să citească codul. Prin urmare, atunci când salvăm fișiere în UTF, trebuie să selectăm întotdeauna opțiunea fără BOM (fără semnătură). Deci ești în avans protejează-te de crakozyabrs care se târăsc. Ceea ce este de remarcat este că unele programe din Windows nu pot face acest lucru (nu pot salva text în UTF-8 fără BOM), de exemplu, același Windows Notepad notoriu. Salvează documentul în UTF-8, dar încă adaugă semnătura (trei octeți suplimentari) la începutul acestuia. Mai mult, acești octeți vor fi întotdeauna aceiași - citiți codul în secvență directă. Dar pe servere, din cauza acestui mic lucru, poate apărea o problemă - vor ieși escrocii. Prin urmare, sub nicio formă nu folosi obisnuit Notepad Windows pentru a edita documente de pe site-ul dvs. dacă nu doriți să apară crăpături. Cele mai bune și cele mai multe varianta simpla Cred că am menționat deja Editor de notepad++, care practic nu are dezavantaje și constă doar din avantaje. În Notepad++, atunci când selectați o codificare, veți avea opțiunea de a converti textul în codificare UCS-2, care este foarte apropiată de standardul Unicode. De asemenea, în Notepad va fi posibilă codificarea textului în ANSI, adică. în legătură cu limba rusă, acesta va fi Windows 1251, pe care l-am descris deja mai sus De unde provin aceste informații? Este înregistrată în registrul blocului dumneavoastră de operație sisteme Windows- ce codificare sa alegeti in cazul ANSI, pe care sa alegeti in cazul OEM (pentru limba rusa va fi CP866). Dacă setați o altă limbă implicită pe computer, atunci aceste codificări vor fi înlocuite cu altele similare din categoria ANSI sau OEM pentru aceeași limbă. După ce salvați documentul în Notepad++ în codificarea de care aveți nevoie sau deschideți documentul de pe site pentru editare, puteți vedea numele acestuia în colțul din dreapta jos al editorului: Pentru a evita rednecks, pe lângă acțiunile descrise mai sus, va fi util să scrieți în antetul acestuia cod sursa toate paginile site-ului informații despre această codificare, astfel încât pe server sau gazdă locală nu era confuzie. În general, toate limbajele de marcare hipertext, cu excepția HTML, folosesc o declarație xml specială, care specifică codificarea textului.< ? xml version= "1.0" encoding= "windows-1251" ? >Înainte de a analiza codul, browserul știe ce versiune este utilizată și cât de exact trebuie să interpreteze codurile de caractere ale acelei limbi. Dar ceea ce este de remarcat este că, dacă salvați documentul în Unicode implicit, atunci această declarație xml poate fi omisă (codificarea va fi considerată UTF-8 dacă nu există BOM sau UTF-16 dacă există o BOM). În cazul unui document limbaj HTML folosit pentru a indica codificarea Element meta, care este scris între etichetele Head de deschidere și de închidere: < head> . . . < meta charset= "utf-8" > . . . < / head>Această intrare este destul de diferită de cea adoptată în standard în Html 4.01, dar respectă pe deplin noul standard Html 5 care este introdus treptat și va fi înțeles complet corect de orice browser utilizat în prezent. În teorie, un element Meta cu o indicație codificări HTML ar fi mai bine sa pui documentul cât mai sus posibil în antetul documentului astfel încât în ​​momentul întâlnirii primului caracter din text nu din ANSI de bază (care sunt întotdeauna citite corect și în orice variație), browserul ar trebui să aibă deja informații despre modul de interpretare a codurilor acestor caractere. Link la primul

Motivul pentru a înțelege cum funcționează UTF-8 și ce este Unicode este faptul că VBScript nu are funcții încorporate pentru a lucra cu UTF-8. Și din moment ce nu am găsit nimic care să funcționeze, a trebuit să scriu/terminez eu. După părerea mea, experiența este utilă în orice caz. Pentru o mai bună înțelegere, voi începe cu teoria.

Despre Unicode

Înainte de apariția Unicode, codificările pe 8 biți erau utilizate pe scară largă, ale căror principale dezavantaje sunt evidente:
  • Există doar 255 de caractere și chiar și atunci unele dintre ele nu sunt grafice;
  • Abilitatea de a deschide un document cu o codificare diferită de cea în care a fost creat;
  • Trebuie create fonturi pentru fiecare codificare.
Așa că s-a decis să se creeze standard unic o codificare „largă” care să includă toate caracterele (la început au vrut să includă numai personaje obișnuite, dar apoi s-au răzgândit și au început să adauge altele exotice). Unicode folosește 1.112.064 de puncte de cod (mai mult de 16 biți). Începutul dublează ASCII, iar apoi restul de latină, chirilică, alte europene și simboluri asiatice. Pentru a desemna caractere, utilizați notația hexazecimală de forma „U+xxxx” pentru primii 65k și de la o cantitate mare numere pentru restul.

Despre UTF-8

Am crezut odată că există Unicode și există UTF-8. Mai târziu am aflat că am greșit.
UTF-8 este doar o reprezentare pe 8 biți a Unicode. Caracterele cu coduri mai mici de 128 sunt reprezentate ca un octet, iar din moment ce în Unicode repetă ASCII, textul scris doar cu aceste caractere va fi text ASCII. Caracterele cu coduri de la 128 sunt codificate în 2 octeți, cu coduri de la 2048 - 3, de la 65536 - 4. Deci ar fi posibil să obțineți până la 6 octeți, dar nu mai rămâne nimic de codificat cu ei.
0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx010000000: 1110xxxx010000000: 111000000 10xxxxxx 10xxxxxx 10xxxxxx

Codificăm în UTF-8

Procedura este aproximativ aceasta:
  • Convertim fiecare caracter în Unicode.
  • Verificăm din ce interval este simbolul.
  • Dacă codul simbolului este mai mic de 128, atunci îl adăugăm neschimbat la rezultat.
  • Dacă codul caracterului este mai mic de 2048, atunci luăm ultimii 6 biți și primii 5 biți ai codului caracterului. Adăugăm 0xC0 la primii 5 biți și obținem primul octet al secvenței și adăugăm 0x80 la ultimii 6 biți și obținem al doilea octet. Concatenați și adăugați la rezultat.
  • Putem continua într-un mod similar pentru codurile mari, dar dacă caracterul este dincolo de U+FFFF va trebui să ne ocupăm de surogate UTF-16.
Funcție EncodeUTF8(s) Dim i, c, utfc, b1, b2, b3 Pentru i=1 la Len(s) c = ToLong(AscW(Mid(s,i,1))) Dacă 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) Atunci 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) Altfel " Surogat minor sau major UTF-16 utfc = Chr(&hEF) & Chr(&hBF) & Chr(&hBD) Sfârșit dacă EncodeUTF8 = EncodeUTF8 + utfc Funcția de final următor ToLong(intVal) Dacă intVal< 0 Then ToLong = CLng(intVal) + &H10000 Else ToLong = CLng(intVal) End If End Function

Decodificarea UTF-8

  • Căutăm primul caracter al formei 11xxxxxx
  • Numărăm toți octeții următori de forma 10xxxxxx
  • Dacă secvența este de doi octeți și primul octet este 110xxxxx, atunci tăiem prefixele și le adăugăm, înmulțind primul octet cu 0x40.
  • La fel pentru secvențe mai lungi.
  • Înlocuiți întreaga secvență cu caracterul Unicode dorit.
Funcție DecodeUTF8(s) Dim i, c, n, b1, b2, b3 i = 1 Do While 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 Apoi Ieșire Do Sfârșit Dacă n = n + 1 Buclă Dacă n = 2 și ((c și &hE0) = &hC0) Atunci b1 = asc(mid(s,i+1,1)) și &h3F b2 = c și &h1F c = b1 + b2 * &h40 Elseif n = 3 și ((c și &hF0) = &hE0) Atunci b1 = asc(mid(s,i+2,1)) și &h3F b2 = asc(mid(s,i+1, 1)) și &h3F b3 = c și &h0F c = b3 * &H1000 + b2 * &H40 + b1 Altfel " Caracter mai mare decât U+FFFF sau secvență incorectă c = &hFFFD Sfârșit dacă s = stânga(s,i-1) + chrw( c ) + mid(s,i+n) Elseif (c și &hC0) = &h80 apoi " Octet de continuare neașteptat s = stânga(s,i-1) + chrw(&hFFFD) + mid(s,i+1) End If i = i + 1 Loop DecodeUTF8 = s End Function

Cele mai bune articole pe această temă