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 voturiBună 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.
Simbol | UNICODE | UTF-8 | CP-1251 | ||
---|---|---|---|---|---|
Hex. | Zece | Hex. | Zece | ||
A | 0410 | 1040 | D090 | 208 144 | 192 |
B | 0411 | 1041 | D091 | 208 145 | 193 |
ÎN | 0412 | 1042 | D092 | 208 146 | 194 |
G | 0413 | 1043 | D093 | 208 147 | 195 |
D | 0414 | 1044 | D094 | 208 148 | 196 |
E | 0415 | 1045 | D095 | 208 149 | 197 |
ȘI | 0416 | 1046 | D096 | 208 150 | 198 |
Z | 0417 | 1047 | D097 | 208 151 | 199 |
ȘI | 0418 | 1048 | D098 | 208 152 | 200 |
Y | 0419 | 1049 | D099 | 208 153 | 201 |
LA | 041A | 1050 | D09A | 208 154 | 202 |
L | 041B | 1051 | D09B | 208 155 | 203 |
M | 041C | 1052 | D09C | 208 156 | 204 |
N | 041D | 1053 | D09D | 208 157 | 205 |
DESPRE | 041E | 1054 | D09E | 208 158 | 206 |
P | 041F | 1055 | D09F | 208 159 | 207 |
R | 0420 | 1056 | D0A0 | 208 160 | 208 |
CU | 0421 | 1057 | D0A1 | 208 161 | 209 |
T | 0422 | 1058 | D0A2 | 208 162 | 210 |
U | 0423 | 1059 | D0A3 | 208 163 | 211 |
F | 0424 | 1060 | D0A4 | 208 164 | 212 |
X | 0425 | 1061 | D0A5 | 208 165 | 213 |
C | 0426 | 1062 | D0A6 | 208 166 | 214 |
H | 0427 | 1063 | D0A7 | 208 167 | 215 |
SH | 0428 | 1064 | D0A8 | 208 168 | 216 |
SCH | 0429 | 1065 | D0A9 | 208 169 | 217 |
Kommersant | 042A | 1066 | D0AA | 208 170 | 218 |
Y | 042B | 1067 | D0AB | 208 171 | 219 |
b | 042C | 1068 | D0AC | 208 172 | 220 |
E | 042D | 1069 | D0AD | 208 173 | 221 |
YU | 042E | 1070 | D0AE | 208 174 | 222 |
eu | 042F | 1071 | D0AF | 208 175 | 223 |
A | 0430 | 1072 | D0B0 | 208 176 | 224 |
b | 0431 | 1073 | D0B1 | 208 177 | 225 |
V | 0432 | 1074 | D0B2 | 208 178 | 226 |
G | 0433 | 1075 | D0B3 | 208 179 | 227 |
d | 0434 | 1076 | D0B4 | 208 180 | 228 |
e | 0435 | 1077 | D0B5 | 208 181 | 229 |
și | 0436 | 1078 | D0B6 | 208 182 | 230 |
h | 0437 | 1079 | D0B7 | 208 183 | 231 |
Și | 0438 | 1080 | D0B8 | 208 184 | 232 |
th | 0439 | 1081 | D0B9 | 208 185 | 233 |
La | 043A | 1082 | D0BA | 208 186 | 234 |
l | 043B | 1083 | D0BB | 208 187 | 235 |
m | 043C | 1084 | D0BC | 208 188 | 236 |
n | 043D | 1085 | D0BD | 208 189 | 237 |
O | 043E | 1086 | D0BE | 208 190 | 238 |
P | 043F | 1087 | D0BF | 208 191 | 239 |
R | 0440 | 1088 | D180 | 209 128 | 240 |
Cu | 0441 | 1089 | D181 | 209 129 | 241 |
T | 0442 | 1090 | D182 | 209 130 | 242 |
la | 0443 | 1091 | D183 | 209 131 | 243 |
f | 0444 | 1092 | D184 | 209 132 | 244 |
X | 0445 | 1093 | D185 | 209 133 | 245 |
ts | 0446 | 1094 | D186 | 209 134 | 246 |
h | 0447 | 1095 | D187 | 209 135 | 247 |
w | 0448 | 1096 | D188 | 209 136 | 248 |
sch | 0449 | 1097 | D189 | 209 137 | 249 |
ъ | 044A | 1098 | D18A | 209 138 | 250 |
s | 044B | 1099 | D18B | 209 139 | 251 |
b | 044C | 1100 | D18C | 209 140 | 252 |
uh | 044D | 1101 | D18D | 209 141 | 253 |
Yu | 044E | 1102 | D18E | 209 142 | 254 |
eu | 044F | 1103 | D18F | 209 143 | 255 |
Simboluri în afara regulii generale | |||||
Eu | 0401 | 1025 | D001 | 208 101 | 168 |
e | 0451 | 1025 | D191 | 209 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
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.
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.
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.