Acest capitol discută modul în care documentele HTML sunt prezentate pe un computer și pe Internet.
Secțiunea din setul de caractere al documentului se referă la problema simbolurilor abstracte. care poate fi parte a documentului în format HTML. Aceste simboluri includ litera latină "A", litera chirilică "I", caracterul chinez "apă" etc.
Deoarece limbile umane au un număr imens de simboluri și multe modalități de a le reprezenta, trebuie să se țină seama de faptul că aceste documente pot fi înțelese de către agenții utilizatorilor din întreaga lume.
Pentru a permite interoperabilitatea rețelelor, SGML cere fiecărei aplicații (inclusiv HTML) să specifice setul de caractere al documentului. Documentul include:- Repertoriu. Un set de simboluri abstracte,. cum ar fi litera latină "A", litera chirilică "I", caracterul chinez "apă" etc.
- Coduri. Un set de referințe întregi la simbolurile repertoriului.
Fiecare document SGML (inclusiv fiecare document HTML) este o secvență de caractere din repertoriu. Sistemele informatice identifică fiecare simbol prin codul său; de exemplu, în setul de caractere ASCII, codurile 65, 66 și 67 înseamnă caracterele "A", "B" și, respectiv, "C".
set de caractere ASCII nu este suficient pentru un sistem de informare la nivel mondial, ca Web-ul, astfel încât HTML utilizează un set de caractere mai complet numit set de caractere universal (Set de caractere universal - UCS), și definite în [ISO10646]. Acest standard definește repertoriul a mii de caractere folosite în întreaga lume.
Setul de caractere definit în [ISO10646] este echivalentul caracter-cu-caractere al Unicode 2.0 ([UNICODE]). Ambele standarde sunt actualizate din când în când, actualizate cu noi simboluri, iar schimbările ar trebui însușite pe serverele Web corespunzătoare. În această specificație, ISO / IEC-10646 sau Unicode înseamnă același set de caractere. Cu toate acestea, în specificația HTML, Unicode este menționat, de asemenea, atunci când discutăm despre alte probleme, cum ar fi algoritmul bidirecțional.
Totuși, setul de caractere pentru documente nu este suficient pentru ca agenții utilizator să poată interpreta corect documentele HTML într-un tip tipic schimbat ca o secvență de octeți într-un fișier sau în timpul unei transmisii de rețea. Agenții utilizatorilor ar trebui să cunoască și codarea caracterelor. care au fost folosite pentru a converti fluxul de simboluri de documente într-un flux de octeți.
Codificările caracterelor din această specificație au nume diferite în alte specificații (ceea ce poate provoca o anumită confuzie). Totuși, acest concept pe Internet înseamnă același lucru. Același nume - „charset - charset“ - este utilizat în antetele de protocol, atributele și parametrii referindu-se la caracterele și de a folosi aceleași valori din [IANA] registru (pentru lista completă, a se vedea [charsets].).
Parametrul "caractere" identifică codificarea caracterelor, care este o metodă de conversie a unei secvențe de octeți într-o secvență de caractere. Această transformare se încadrează în mod natural în schema de activități web: serverele trimit documente HTML către agenții utilizator sub forma unui flux de octeți; Agenții utilizatorilor le interpretează ca o secvență de caractere. Metodele de transformare pot varia de la simpla combinare de la unul la unul cu circuite complexe sau algoritmi de comutare.
O tehnică simplă de codare a unui singur octet nu este suficientă pentru șiruri de text cu un repertoriu de caractere atât de larg ca [ISO10646]. Pe lângă codarea întregului set de caractere (de exemplu, UCS-4), există și alte codificări pentru părțile [ISO10646].
Servere și proxy-uri se pot schimba codificarea caracterelor (numit transcodare) pe zbor pentru a efectua agentii utilizator cerere (vezi. Secțiunea 14.2 [RFC2068]. Cererea antet HTTP „Accept-Charset“). Serverele și proxy-urile nu ar trebui să servească documentul într-o codificare care include întregul set de caractere al documentului.
Web criptare utilizat pe scară largă - ISO-8859-1 (denumită în continuare "Latin-1", folosit pentru majoritatea limbilor din Europa de Vest), ISO-8859-5 (cu suport chirilică), SHIFT_JIS (codificare japoneza), EUC-JP (un alt Codificare japoneză) și UTF-8 (o variantă de codare ISO 10646 care utilizează un număr diferit de octeți pentru caractere diferite). Nume de codificări de caractere sunt sensibile la majuscule, astfel încât, de exemplu, „Shift_JIS“, „Shift_JIS“, și „Shift_JIS“ sunt echivalente.
Această specificație nu specifică codificările de caractere ale unui agent utilizator.
Agenții utilizator corespunzători trebuie să afișeze corect în Unicode toate caracterele în orice codificare pe care le pot recunoaște.
Note privind anumite codificări
Când textul HTML este transmis în UTF-16 (charset = UTF-16), datele de text ar trebui să fie transmise în ordine octet de rețea ( "big-endian", de mare ordine octet - primul), în conformitate cu [ISO10646]. secțiunea 6.3 și [UNICODE]. poziția C3, pagina 3-1.
Mai mult decât atât, pentru a crește probabilitatea de interpretare corectă, se recomandă să transmită la UTF-16, începând întotdeauna cu caracterul non-rupere spațiile de lățime zero (codul feff hexazecimal, de asemenea, numit Mark de ordine octet (Byte Order Mark - BOM)), care este de manipulare bytes devine hex FFFE , nu a fost atribuit niciodată un simbol. Astfel, agentul utilizator primește FFFE codul hexazecimal ca primii octeți ai textului va fi conștient de faptul că restul textului, bytes trebuie să fie inversată.
Nu utilizați formatul de transformare UTF-1 [ISO10646] (IANA înregistrat ca ISO-10646-UTF-1). Pentru informații despre ISO 8859-8 și algoritmul bidirecțional, consultați secțiunea bidirecționalitate și codificarea caracterelor.
Cum determină serverul ce codificare de caractere este folosit în document? Unele servere verifică primele câteva octeți ale documentului sau sunt verificate în baza unei baze de date cu fișiere și codificări cunoscute. Multe servere web moderne oferă administratorilor mai mult control asupra configurației unui set de caractere decât serverele mai vechi. Administratorii de servere Web ar trebui să folosească următoarele mecanisme pentru a trimite parametrul "charset" dacă este posibil, dar ar trebui să aibă grijă să nu stabilească valoarea eronată a parametrului "charset" pentru documente.
Cum se cunoaște agentul utilizator care codificare de caractere a fost utilizată? Aceste informații sunt furnizate de server. Cel mai bun mod de a informa agentul utilizator despre codificarea caracterelor documentului - folosiți parametrul „charset“ în câmpul antet „Content-Type“ protocol HTTP (. [RFC2068] Secțiunile 3.4 și 14.18) De exemplu, antet HTTP anunță următoarea, care utilizează codificarea EUC-JP:
Protocolul HTTP ([RFC2068]. Secțiunea 3.7.1) consideră că ISO-8859-1 codificarea caracterelor implicit, dacă parametrul "charset" în câmpul antet "Content-Type" lipsește. În practică, această recomandare este inutilă, deoarece unele servere nu permit trimiterea parametrului "charset", iar unele nu pot fi configurate pentru a trimite acest parametru. Prin urmare, agenții utilizatorilor nu ar trebui să își asume nici o valoare pentru parametrul "charset".
Pentru a specifica restricțiile serverului sau configurația, documentele HTML pot include informații explicite despre codificarea caracterelor documentului; Pentru a furniza astfel de informații agenților utilizator, poate fi utilizat un element META.
În plus față de această listă de priorități, agentul utilizator poate utiliza setările euristice și setările utilizatorului. De exemplu, mulți agenți utilizator folosesc un euristic pentru a recunoaște diferite codificări utilizate pentru limba japoneză. Agenții utilizatorilor au, de obicei, o codificare implicită locală definită de utilizator, pe care o utilizează dacă nu există instrucțiuni de codificare.
Notă. Dacă într-o aplicație trebuie să utilizați caractere care nu se află în codarea [ISO10646]. acestor simboluri trebuie să li se atribuie o zonă personală pentru a evita conflictele cu această versiune sau cu versiunile viitoare ale standardului. Cu toate acestea, acest lucru nu este recomandat din motive de portabilitate.
Referințele la caractere din HTML pot avea două forme:
- Numere de caractere numerice (zecimal sau hexazecimal).
- Referințe la combinații de simboluri.
Notă. HTML oferă alte modalități de a reprezenta caracterele, în special imaginile încorporate.
Notă. În SGML, în unele cazuri nu puteți folosi caracterul final ";" după simbolurile de referință (de exemplu, în caracterul de întrerupere a liniei sau chiar înaintea etichetei). În alte circumstanțe, ele nu pot fi șterse (de exemplu, în mijlocul unui cuvânt). Vă sugerăm să utilizați ";" întotdeauna pentru a evita problemele cu agenții utilizator, pentru care este necesar acest simbol.
5.3.1 Referințe numerice numerice
Numerele de caractere numerice indică codul caracter din setul de caractere al documentului. Referințele numerice la simboluri pot lua de asemenea două forme:- Sintaxa "#D;", unde D este un număr zecimal, indică caracterul Unicode cu numărul zecimal D.
- Sintaxa "# xH;" sau "#XH;", unde H este un număr hexazecimal, indică un caracter Unicode cu număr hexazecimal H. Referințele numerice hexazecimale sunt case sensibile.
Iată câteva exemple de referințe numerice:
- # 229; (zecimal) reprezintă litera "a" cu un cerc de sus (folosit, de exemplu, în limba norvegiană).
- # xE5; (hexazecimal) reprezintă același caracter.
- # Xe5; (hexazecimal) reprezintă același caracter.
- # 1048; (zecimal) reprezintă litera majusculă chirilică "I".
- # x6C34; (hexazecimal) reprezintă caracterul chinez "apă".
Notă. Deși reprezentarea hexazecimală nu este definită în [ISO8879]. Este de așteptat în noua versiune, așa cum este descris în [WEBSGML]. Această convenție este deosebit de utilă, deoarece standardele de caractere folosesc de obicei notații hexazecimale.
5.3.2 Combinații de referință pentru simboluri
HTML 4.0 nu definește o referință entitate caracter pentru fiecare caracter. De exemplu, pentru litera chirilică "I" nu există o referință a entității de caractere. Vedeți lista completă a referințelor la caracterele definite în HTML 4.0.
Combinațiile de referințe de caractere sunt sensibile la litere mari și mici. De exemplu, Å indică un caracter diferit (A cu un cerc de majusculă), mai degrabă decât å (a cu un cerc minuscul).
Patru linkuri ar trebui menționate în mod specific, deoarece acestea sunt adesea folosite pentru a indica caractere speciale:- "Lt;" reprezintă un semn <.
- "Gt;" reprezintă semnul>.
- "-" reprezintă caracterul .
- "reprezintă un semn."
Posibil, agentul utilizator nu poate afișa toate caracterele din document, de exemplu, din cauza lipsei de text corespunzătoare sau în cazul în care caracterul are o valoare care nu poate fi exprimată în agentul interior utilizator codificata etc.