- UTF-8 koodaa Unicode-pisteet 1–4 tavussa, on yhteensopiva ASCII:n kanssa ja kelpaa kaikille kielille.
- Itsesynkronointi ja validointi: 0/110/1110/11110-mallit estävät päällekkäisyyksiä ja helpottavat virheiden havaitsemista.
- Verkko ja järjestelmät: metamerkistö, laaja tuki ja helppo muunnos Windowsissa/macOS:ssa/Linuxissa.
Jos luet tätä artikkelia tänään näkemättä mitään outoja symboleja, se on UTF-8:n ansiota . Tämä koodaus mahdollistaa kirjainten, aksenttien, teknisten symbolien ja jopa emojien näyttämisen samalla tavalla missä tahansa nykyaikaisessa selaimessa, käyttöjärjestelmässä tai sähköpostiohjelmassa. Se on laajimmalle levinnyt standardi verkossa ja digitaalisen viestinnän perusta sellaisena kuin me sen tunnemme.
Kun laite näyttää tekstiä, se itse asiassa käsittelee numeroita . Nämä numerot ovat Unicode-standardin määrittelemiä koodipisteitä , ja muuntaaksemme ne tavuiksi, jotka kulkevat verkossa tai tallennetaan tiedostoon, suoritamme muunnoksen: UTF-8 . Seuraavilla riveillä ymmärrät, mitä se on, miten se toimii, miksi siitä tuli standardi, sen edut ja rajoitukset sekä miten välttää yleisiä virheitä.
Mikä on UTF-8?
UTF-8 (8-bittinen Unicode Transformation Format) on tapa muuntaa Unicode-koodipisteitä tavusarjoiksi . Sen keskeinen ominaisuus on vaihteleva pituus : jotkut merkit vievät yhden tavun, kun taas toiset vaativat 2, 3 tai 4 tavua. Tämä mahdollistaa tiiviin tekstin kirjoittamisen yksinkertaisilla latinalaisilla merkeillä , mutta se voi myös edustaa mitä tahansa Unicode-repertuaarin merkkiä.
Se on täysin yhteensopiva ASCII-koodiston kanssa : ensimmäiset 128 merkkiä (U+0000 - U+007F) on koodattu yhdellä tavulla, joka on identtinen 7-bittisen ASCII-koodiston kanssa. Tämä helpotti siirtymistä vanhemmista järjestelmistä ja selittää suuren osan sen menestyksestä internetissä, sähköpostissa ja IETF-protokollissa.
UTF-8 erottuu edukseen kestävyytensä ansiosta : se sisältää synkronointibittejä, jotka mahdollistavat jokaisen symbolin alun luotettavan tunnistamisen. Tämä itsesynkronointiominaisuus helpottaa sen havaitsemista, "näyttääkö" jokin sekvenssi UTF-8:lta , mikä on erittäin hyödyllistä työkaluissa ja jäsentimissä.
Unicode: Kaiken perusta
Unicode on yleismaailmallinen standardi, joka antaa jokaiselle merkille yksilöllisen numeron kielestä, alustasta tai sovelluksesta riippumatta. Tätä numeroa kutsutaan koodipisteeksi , ja se kirjoitetaan yleensä heksadesimaalimuodossa U+XXXX (tai tarvittaessa useammalla numerolla).
Esimerkiksi Iso kirjain "A" on U+0041HTML:ssä voimme viitata siihen myös nimellä A. Tietokoneesi ei "ajattele" A:ta kirjaimena, vaan numerona 65., ja sitten koodaus (kuten UTF-8) päättää, miten kyseinen luku esitetään tavuina.
Jos haluat nähdä, miten Unicode muunnetaan merkeiksi tietokoneellasi , Windowsissa voit pitää Alt-näppäintä painettuna ja kirjoittaa desimaalinumerokoodin numeronäppäimistöllä: esimerkiksi Alt+65 palauttaa merkinnän ”A” (katso täydellinen luettelo Alt-koodeista ). Se on klassinen oikotie, joka näyttää, miten koodit ovat näkemiesi merkkien taustalla.
Hieman historiaa: miten UTF-8 syntyi
Ken Thompson kehitti UTF-8:n Rob Piken ohjauksessa 2. syyskuuta 1992. He toteuttivat sen Bell Labsin Plan 9 -käyttöjärjestelmässä ja esittelivät sen virallisesti USENIX-tapahtumassa (San Diegossa tammikuussa 1993) . Standardoinnin aikana, jota sponsoroi X/Open Joint Internationalization Group (XOJIG) , se tunnettiin nimillä kuten FSS/UTF ja UTF-2, ennen kuin se yhdistettiin UTF-8:ksi.
Suunnittelu ratkaisi käytännön ongelmia , jotka vaivasivat aiempia yrityksiä universaaliin koodaukseen: ASCII-yhteensopivuus, itsesynkronointi, päällekkäisten tavujen puuttuminen ja virheiden havaitsemisen helppous. Tämä tasapaino teki siitä käytännössä verkon standardin.
Miten UTF-8 toimii konepellin alla
UTF-8 ryhmittelee merkit niiden koodaamiseen tarvittavien tavujen mukaan . Tavujen määrä riippuu yksinomaan Unicode-koodipisteestä ja noudattaa bittikuvioita, jotka osoittavat sekvenssin pituuden.
- 1 tavu (U+0000 - U+007F)ASCII-merkit. Muoto:
0xxxxxxxMerkittävin bitti on 0, joka takaa suoran yhteensopivuuden ASCII-kielen kanssa. - 2 tavua (U+0080 - U+07FF): Muoto
110yyyyy 10xxxxxx. Sitä käytetään useimmissa eurooppalaisissa aakkosissa, joissa on diakriittisiä merkkejä, sekä muissa, kuten kreikan, kyrillisen, heprean tai arabian aakkosissa.. - 3 tavua (U+0800 - U+FFFF): Muoto
1110zzzz 10yyyyyy 10xxxxxx. Sisältää monikielisen perussuunnitelman (BMP) sekä CJK:n (kiina, japani, korea), tekniset symbolit ja yleisimmin käytetyt merkit. - 4 tavua (U+10000 - U+10FFFF): Muoto
11110uuu 10uuzzzz 10yyyyyy 10xxxxxx. Edustaa täydentäviä tasojaedistyneet matemaattiset symbolit, historialliset kirjoitukset, harvinaisemmat ideografiset symbolit jne.
Itsesynkronoinnin avain piilee otsikkobiteissä : 0 ASCII:lle; 110 kahdelle tavulle; 1110 kolmelle; 11110 neljälle. Jatkotavut alkavat aina luvulla 10. Tämän ansiosta jatkotavu ei voi koskaan esiintyä aloitustavuna , eikä kelvollinen sekvenssi voi koskaan olla pidemmän sekvenssin osamerkkijono (ei päällekkäisyyttä -periaate).
Vastaavuus UTF-16:n ja sijaisparien kanssa
UTF-16 edustaa BMP-koodipisteitä 16-bittisenä yksikkönä ja pisteet U+FFFF:n yläpuolella, joissa korvaavat parit kantaman sisällä D800–DFFF. Sen sijaan, UTF-8 koodaa aina reaaliaikaiset koodipisteet, ei UTF-16-yksiköitä, mikä välttää sekaannuksia korvikkeiden kanssa.
Historiallisesti jotkut luonnokset sallivat 5 tai 6 tavua UTF-8:ssa kattaakseen laajemman alueen, mutta Unicode ja RFC 3629 rajoittavat UTF-8:n enintään 4 tavuun . ISO/IEC harkitsi laajempia vaihtoehtoja, mutta ne eivät ole osa nykyistä standardia.
Käytännön esimerkki: ñ
Merkillä ”ñ” on koodipiste U+00F1, joka on kahden tavun alueelle. Kuvion mukaisesti se koodataan muodossa 110xxxxx 10xxxxxx. Sen UTF-8-esitystapa on 0xC3 0xB1Dekoodaus on käänteinen prosessi: hyödyllisten bittien lukeminen ja alkuperäisen koodipisteen rekonstruointi.
UTF-8:n edut ja rajoitukset
Tärkeimmät edut :
- ASCII-tukiASCII-tekstit kelpaavat UTF-8-merkistössä ilman muutoksia.
- Yleismaailmallinen: voi edustaa mitä tahansa Unicode-merkkiä, mukaan lukien tekniset symbolit ja emojeet.
- Tehokkuus latinankielisissä teksteissä: kun käytetään yhtä tavua ASCII:lle, säästää tilaa verrattuna UTF-16:een monilla länsimaisilla kielillä.
- Itsesynkronointi ja tunnistus: bittikuviot mahdollistavat tunnistaa hahmojen alun ja validoida sekvenssejä helposti.
Rajoitukset ja kompromissit :
- CJK-tekstit vievät enemmän tilaa kuin UTF-16-tekstit, jossa monet näistä merkeistä mahtuvat kahteen kiinteään tavuun.
- Laskentakustannukset: koska pituus on vaihteleva, jotkin operaatiot (esim. ”siirry merkkiin n”) vaativat alusta asti läpikäymistä, ja tietyt tehtävät voivat olla nopeampia UTF-16/UTF-32-muodossa.
BOM (tavujärjestysmerkki) UTF-8-muodossa
UTF-8 ei tarvitse BOMia koska tavujärjestys ei muuta arvojen merkitystä (pienin yksikkö on tavu). Silti Valinnainen osaluettelo on olemassa, merkki U+FEFF koodattuna muodossa EF BB BF tiedoston tai virran alussa, jota voidaan käyttää ilmaisemaan, että "tämä on Unicode/UTF-8".
Parhaat käytännöt : Jos se esiintyy alussa, jotkin järjestelmät hyväksyvät sen ja toiset käsittelevät sitä kirjaimellisesti. Yhdistetyissä merkinnöissä on suositeltavaa poistaa välissä olevat osaluettelot . Sen lisääminen ei ole pakollista, ja sen hyödyllisyys UTF-8:ssa on rajallisempi kuin UTF-16/UTF-32:ssa, joissa se merkitsee entiteetin.
Tyypillisiä koodausvirheitä ja niiden käsittelyä
Vankan UTF-8-dekooderin on joko hylättävä virheellisesti muodostetut sekvenssit tai korvattava ne U+FFFD (REPLACEMENT CHARACTER) -merkillä tai ilmoitettava virheestä. Yleisimmät virheet ovat:
- Katkaistut sekvenssit: monitavuinen johdantotavu ilman riittäviä jatkumoita.
- Löyhät jatkotavut: ilmestyä
10xxxxxxilman kelvollista johdantotavua. - Ylipituudet: koodaus useammalla tavulla kuin on tarpeen; esimerkiksi yritettäessä koodata ASCII-merkkiä kahdella tavulla (
0xC0y0xC1ovat virheellisiä). - Kielletyt pituudet: alkaa ehdottaa 5 tai 6 tavua (
0xF8-0xFDeivät ole voimassa UTF-8-standardissa). - Arvot Unicode-alueen ulkopuolella: ei tuettu yli U+10FFFF-versioissatiettyjä arvoja (
0xF5-0xF7alkuina) ovat virheellisiä. - UTF-16-korvikeparit:
D800–DFFFeivät ole kelvollisia koodipisteitä Unicode-muodossa; niiden ei pitäisi näkyä UTF-8-koodattuna.
Kun näet näytöllä merkin "�" , se johtuu todennäköisesti koodausvirheestä tai tiedostosta, joka on tallennettu eri koodisivulle. Ratkaisu on pakottaa UTF-8-koodaus päästä päähän (tiedosto, palvelin, tietokanta, HTTP-otsikot).
UTF-8 verkossa ja sähköpostissa
HTML-sivun tarvitsee määrittää vain yksi koodaus . Yhteensopivuuden ja laajuuden vuoksi suositeltu koodaus on UTF-8. Lisää seuraava metatunniste otsikkoon mahdollisimman pian:
<meta charset="UTF-8">
Sijoita se `<head>`-tagin alkuun, jotta selain lukee sen ennen dokumentin käsittelyä. Tämä estää epäjohdonmukaisuuksia ja "rikkinäisiä" merkkejä. UTF-8:n käyttöönotto verkossa on valtava ; sitä käyttää valtaosa nykyisistä verkkosivustoista.
Sähköpostissa UTF-8:aa tukevat ja suosittelevat laajalti organisaatiot, kuten Internet Mail Consortium. Sähköpostiohjelmien määrittäminen käyttämään UTF-8:aa vähentää ongelmia viestien vaihdossa muita kieliä puhuvien ihmisten kanssa.
UTF-8, UTF-16 ja UTF-32: Mitä eroa niillä on?
UTF-8 : Muuttuvan pituinen koodaus 8-bittisissä yksiköissä; ihanteellinen verkkoon , erittäin tehokas ASCII- ja länsimaisten kielten kanssa. Erinomainen yhteensopivuus ja virheiden havaitseminen.
UTF-16 : vaihteleva pituus 16-bittisissä yksiköissä; käyttää sijaispareja U+10000:lle ja sitä suuremmille. Siitä on usein hyötyä, kun muut kuin ASCII-merkit ovat enemmistönä , ja sitä käytetään monissa API-rajapinnoissa ja alustoilla (esimerkiksi Windows toimii natiivisti UTF-16-muodossa ).
UTF-32 : kiinteä 32 bitin pituus merkkiä kohden; erittäin helppo indeksoida , mutta tilaa vievä. Se on varattu tapauksiin, joissa koko on toissijainen käsittelyn yksinkertaisuuteen nähden.
Yhteensopimattomat variantit: CESU-8 ja “Modified UTF-8”
CESU-8 koodaa UTF-16-yksiköt suoraan (mukaan lukien sijaisparit) koodipisteiden koodauksen sijaan, eroaakseen siten standardi-UTF-8:sta U+FFFF-merkkien yläpuolella. Jotkin historialliset alustat käyttivät sitä: Oracle 8 tarjosi sitä aliaksella UTF-8, ja Oracle 9:stä alkaen se lisäsi standardi-UTF-8:n eri aliaksella. Java ja Tcl ovat käyttäneet CESU-8:aa tietyissä yhteyksissä.
Muokattu UTF-8 (esimerkiksi Java-ympäristöissä) esittää NUL-merkin (U+0000) muodossa 0xC0 0x80 merkin 0x00 sijaan. Se välttää null-tavun C-merkkijonoissa , mutta ei ole yhteensopiva UTF-8-standardin kanssa. Monet tämän "muokatun" version toteutukset ovat myös CESU-8-standardin mukaisia.
UTF-8 Windowsissa ja API:t: Koodisivut ja muuntaminen
Windows toimii sisäisesti UTF-16-merkistössä (WCHAR), mutta Windows 10 -versiosta 1903 lähtien voit pakota UTF-8 prosessikoodisivuksi sovelluksen manifestin kautta (ominaisuus activeCodePage). Tämä helpottaa vanhan, "-A"-API-rajapintoja käyttävän koodin toimintaa UTF-8:n yli.
API-rajapinnat -A vs. -W: -A riippuvat ANSI-koodisivusta konfiguroitu (voi olla CP_UTF8), kun taas -W he käyttävät UTF-16Jotta ne toimisivat yhdessä, MonitavuinenLeveäksiMerkiksi y LeveämerkkinenMonitavuiseksi voit muuntaa UTF-8:n ja UTF-16:n välillä; Yhdysvallat CP_UTF8 ja tarvittaessa MB_ERR_INVALID_CHARS syöttövirheiden havaitsemiseksi.
UTF-8 on yhteensopiva nykyaikaisten selainten (Chrome, Firefox, Safari, Edge, Opera ja Internet Explorerin uusimmat versiot) ja useimpien käyttöjärjestelmien (Windows, Linux, macOS, Android, iOS) kanssa. Ellet käytä kovin vanhaa ohjelmistoa, ongelmia ei pitäisi olla.
Tiedostojen muuntaminen UTF-8-muotoon
Windowsissa (Muistio) : avaa tiedosto, valitse "Tiedosto > Tallenna nimellä…" ja valitse "Koodaus"-kohdasta UTF-8 . Tallenna uudella nimellä, jos haluat säilyttää alkuperäisen.
macOS:ssä (TextEdit) : Valitse tallennuksen yhteydessä Unicode (UTF-8) kohdassa ”TextEdit > Asetukset > Avaa ja tallenna” . Vie sitten tiedosto kyseinen asetus käytössä.
Linuxissaterminaalin avulla voit käyttää iconv. Esimerkiksi: iconv -f <codificación_origen> -t UTF-8 <entrada> -o <salida>. Tarkista myöhemmin että sitä käyttävä sovellus odottaa myös UTF-8-koodausta.
Mistä tietää, onko tiedosto UTF-8-merkistössä? Monet nykyaikaiset editorit ilmoittavat tämän tilarivillä. Jos näet outoja merkkejä, kuten "�", vääristyneitä aksentteja tai väärin näkyvää "ñ/ç", tarkista tiedoston koodaus ja editorin/palvelimen/tietokannan asetukset.
Hyviä käytäntöjä yllätysten välttämiseksi
Määrittele UTF-8 mahdollisimman aikaisin HTML- ja HTTP-otsikoissa. Tasaa koodaus koko pinossa (lähdetiedostot, mallit, tietokanta ja yhteys). Vältä eri koodausten sekoittamista samalla sivulla tai työnkulussa ja käytä työkaluja, jotka validoivat/normalisoivat syötteen.
Integraatioille ja API-rajapinnoille, määritä aina koodaus otsikoissa (Content-Type: application/json; charset=UTF-8, esimerkiksi). Testaa monikielisellä datalla (aksentit, hijabi-aakkoset, emojit) heikkojen kohtien havaitsemiseksi ennen tuotantoa.
UTF-8-koodaustyylimuoto voitti, koska se tasapainottaa yhteensopivuuden, tehokkuuden ja ulottuvuuden . Se on käytännöllisin tapa varmistaa, että teksti kulkee ehjänä kulttuurien, järjestelmien ja sovellusten välillä riippumatta siitä, sisältääkö se aksentteja, teknisiä symboleja tai muita kuin latinalaisia merkistöjä.