close

UTF-8

Siirry navigointiin Siirry hakuun
UTF-8
Vakio ISO 10646 ( Unicode )
Idiomi monikielinen Tarkastele ja muokkaa Wikidatan tietoja
Kunto Käytössä
Edellinen UTF-1

UTF -8 (8 - bittinen Unicode Transformation Format ) on Unicode- ja ISO 10646 -merkistön koodausmuoto, joka käyttää muuttuvan pituisia symboleja. UTF-8:n loivat Robert C. Pike ja Kenneth L. Thompson . Internet Engineering Task Forcen (IETF) < RFC 3629 >määrittelee sen standardiksi[ 1 ] Se on tällä hetkellä yksi kolmesta Unicode- ja verkkokielten tunnistamasta koodausmahdollisuudesta tai neljästä ISO 10646 :ssa .

Sen tärkeimmät ominaisuudet ovat:

  • Se pystyy edustamaan mitä tahansa Unicode-merkkiä.
  • Käytä vaihtelevan pituisia symboleja (1–4 tavua Unicode-merkkiä kohti).
  • Se sisältää 7-bittisen US-ASCII- määrityksen , joten kaikki ASCII-viestit esitetään muuttumattomina.
  • Sisältää synkronoinnin. Jokaisen symbolin alku on mahdollista määrittää aloittamatta lukemista uudelleen viestinnän alusta.
  • Ei päällekkäin. Arvojoukot, jotka monitavuisen merkin kukin tavu voi ottaa, ovat hajanaisia, joten niitä ei ole mahdollista sekoittaa keskenään.

Nämä ominaisuudet tekevät siitä houkuttelevan sähköpostien ja web-sivujen koodauksessa. [ 2 ] ​[ 3 ]​ IETF edellyttää, että kaikki Internet - protokollat ​​osoittavat, mitä koodausta ne käyttävät tekstille, ja että UTF-8 on yksi tuetuista koodauksista. [ 4 ] Internet Mail Consortium (IMC) suosittelee, että kaikki sähköpostiohjelmat pystyvät luomaan ja näyttämään UTF-8-koodattuja viestejä. [ 5 ]

Historia

UTF-8:n suunnitteli Kenneth L. Thompson Rob Piken suunnittelukriteerien mukaisesti 2. syyskuuta 1992 . He molemmat ottivat sen käyttöön ja istuttivat sen Bell Labsin käyttöjärjestelmään Plan 9 . Se esiteltiin myöhemmin virallisesti USENIX - konferenssissa San Diegossa tammikuussa 1993 . Se nostettiin standardiksi X/Open Joint Internationalization Groupin (XOJIG) sponsoroimana ja sai samalla eri nimet, kuten FSS/UTF ja UTF-2. [ 1 ]

Kuvaus

UTF-8 jakaa Unicode-merkit useisiin ryhmiin niiden koodaamiseen tarvittavien tavujen määrän perusteella. Tavujen määrä riippuu yksinomaan Unicoden osoittamasta merkkikoodista ja sen esittämiseen tarvittavien tavujen määrästä. Hahmojen jakautuminen on seuraava:

  • Yhdellä tavulla koodatut merkit: US-ASCII:n sisältämät merkit, yhteensä 128 merkkiä.
  • Kaksitavuiset koodatut merkit: Yhteensä 1920 merkkiä. Tähän ryhmään kuuluvat muun muassa romanssimerkit ja diakriittiset kirjaimet sekä kreikkalaiset , kyrilliset , koptilaiset , armenialaiset , heprealaiset , arabialaiset , syyrialaiset ja thanan aakkoset .
  • Kolmella tavulla koodatut merkit: Unicode-monikielisen perustason merkit, jotka yhdessä edellisen ryhmän kanssa sisältävät käytännössä kaikki yleisesti käytetyt merkit, muun muassa CJK -ryhmän merkit : kiina, japani ja korea.
  • Neljällä tavulla koodatut merkit: Monikielisen lisätason merkit. Matemaattiset symbolit ja klassiset aakkoset pääasiassa akateemiseen käyttöön: Lineaarinen B - tavu ja ideografinen, persialainen aakkoset, foinikialainen... Ja ideografinen lisätaso: Harvinaisen käytön Han -merkit.

Tärkeä koodauksen ominaisuus on, että monitavuisen sekvenssin ensimmäisen tavun merkittävimmät bitit määräävät sekvenssin pituuden. Nämä tärkeimmät bitit 110 kaksitavuisille sekvensseille; 1110 kolmitavuisille sarjoille jne. Nämä bitit tarjoavat myös synkronointiinformaatiota, joka mahdollistaa symbolin alun tunnistamisen.

Merkkikoodaus

Seuraava taulukko näyttää kuinka merkit on koodattu. Kiinteät arvot jokaisen tavun alussa takaavat päällekkäisyysperiaatteen noudattamisen, koska ne ovat erilaisia ​​riippuen tavun sijainnista merkkijonossa. Mukana on myös UTF-16-koodaus, jotta näet, miten se eroaa kiinteän tavumäärän koodauksesta.

UNICODE- pistealue
skalaariarvo UTF-16 UTF-8 Arvosanat
000000-00007F 00000000 0xxxxxxx 00000000 0xxxxxxx 0xxxxxxx Alue vastaa US-ASCII:ta. Yksitavuiset symbolit, joissa merkitsevin bitti on 0
000080-0007FF 00000yyy yyxxxxxx 00000yyy yyxxxxxx 110yyyyy 10xxxxxx Kaksitavuiset symbolit. Ensimmäinen tavu alkaa 110:llä, toinen tavu alkaa 10:llä
000800-00FFFF zzzzyyyy yyxxxxxx zzzzyyyy yyxxxxxx 1110zzzz 10yyyyyy 10xxxxxx Kolmen tavun symbolit. Ensimmäinen tavu alkaa numerolla 1110, seuraavat tavut alkavat numerolla 10
010000-10FFFF 000uuuuu zzzzyyyy yyxxxxxx 110110ww wwzzzzyy
110111yy yyxxxxxx
(wwww = uuuuu - 1)
11110uuu 10uuzzzz 10yyyyyy 10xxxxxx Nelitavuiset symbolit. Ensimmäinen tavu alkaa numerolla 11110, seuraavat tavut alkavat numerolla 10

Yllä olevan mallin mukaisesti olisi mahdollista kasvattaa symbolin maksimikokoa 4 tavusta 6 tavuun. Unicoden antama UTF-8-määritelmä ei tue tätä mahdollisuutta, jota ISO/IEC tukee. [ 6 ]

Image
Esimerkki: Unicode -merkin ñ koodaus .

Katsotaanpa esimerkkinä, kuinka merkki eñe ('ñ') on koodattu UTF-8:ssa, joka esitetään Unicodessa muodossa 0x00F1:

  • Sen arvo on välillä 0x0080 - 0x07FF. Taulukon kysely osoittaa, että se on koodattava 2 tavulla muodossa 110 xxxxx 10 xxxxxx.
  • Heksadesimaaliarvo 0x00F1 vastaa binaariarvoa (0000-0) 000-1111-0001 (ensimmäiset 5 bittiä jätetään huomioimatta, koska niitä ei tarvita määritellyn alueen arvojen esittämiseen).
  • Tarvittavat 11 bittiä asetetaan järjestyksessä X:llä merkittyyn kohtaan: 110 00011 10 110001 .
  • Lopputuloksena on kaksi tavua heksadesimaaliarvoilla 0xC3 0xB1. Tämä on koodi kirjaimelle eñe UTF-8:ssa.

Alkuperäisen koodipisteen palauttamiseksi suoritetaan käänteinen prosessi, jossa bittisekvenssit hajotetaan komponenteiksi ja otetaan vain tarvittavat bitit.

Koodausvirheet

Siksi koodaussäännöt asettavat rajoituksia muodostettaville merkkijonoille. Standardin mukaan merkkijonotulkin on hylättävä virheellisiä merkkejä, eikä se saa yrittää tulkita väärin muotoiltuja merkkejä. UTF-8-merkkijonotulkki voi keskeyttää ilmoittamalla virheestä, ohittaa väärin muotoillut merkit tai korvata ne U+FFFD-merkillä ( REPLACEMENT CHARACTER ).

Seuraavat ovat koodausvirheitä:

  • Katkaistut sekvenssit, kun monitavuista aloitusmerkkiä ei seuraa tarpeeksi tavuja.
  • Datatavut (10:stä alkaen) ilman vastaavaa merkin alkua.
  • Epätavallisen pitkät merkit: edustavat esimerkiksi yhden tavun ASCII-alueen merkkiä 2 tavulla. tavua 0xC0, 0xC1ei tueta.
  • Merkkien aloitustavut, jotka määrittävät 5 tai 6 tavun epäonnistuneen pituuden. Tavuja 0xF8a 0xFDei tueta.
  • Unicode-alueen ulkopuoliset arvot: tavua 0xF5ja 0xF7niitä ei tueta.
  • Virheellisiä merkkejä. UTF-16:n korvikeparien alueella olevat merkit, jotka on koodattu 0xD800a 0xDFFF, eivät ole oikeita merkkejä, eikä niitä tule koodata UTF-8:aan.

Tavujärjestysmerkki (BOM)

Kun merkki sijoitetaan UTF-8-merkkijonon alkuun, UTF-8- 0xFEFFkoodattua merkkiä 0xEF, 0xBB, 0xBF, kutsutaan tavujärjestysmerkiksi (BOM) ja se tunnistaa sisällön Unicode-merkkijonona. Kun tämä merkki löytyy muualta merkkijonosta, se tulee tulkita sen alkuperäisellä Unicode-merkityksellä ( ZWNBSP). Koska UTF-8 on koodaus, jossa tiedon yksikkö on tavu, sillä ei ole UTF-16:ssa ja UTF-32:ssa olevaa apuohjelmaa tavujärjestyksen tunnistamiseksi sanassa ( endianness ).

Spesifikaatio ei suosittele tai estä BOM:n käyttöä, vaikka se neuvoo olemaan poistamatta sitä, jos se on olemassa turvatoimenpiteenä, digitaalisen allekirjoituksen sovellusten virheiden estämiseksi jne. Se varoittaa myös, että se on eliminoitava ketjutusoperaatioissa, jotta sitä ei pidettäisi ei-alkuasennossa.

UTF-8 johdannaiset

Seuraavat koodausstandardit poikkeavat UTF-8-spesifikaatiosta ja ovat siksi yhteensopimattomia sen kanssa.

CESU-8

Tämä toteutus suorittaa esitetyn merkkijonon suoran käännöksen UTF-16:lla Unicode-koodipisteiden koodauksen sijaan. Tuloksena on erilaiset koodaukset Unicode-merkeille, joiden koodi on suurempi kuin 0xFFFF. [ 1 ] Oracle toteuttaa versiosta 8 alkaen CESU-8:n aliaksella UTF8 ja versiosta 9 alkaen standardin UTF-8:n toisella aliaksella. [ 7 ] Java ja Tcl käyttävät tätä koodausta. [ lainaus tarvitaan ]

Muokattu UTF-8

Muokatun UTF-8:n yhteydessä tyhjä merkki koodataan 0xC080muodossa 0x00. Tällä tavalla nollamerkin sisältävä teksti ei sisällä tavua 0x00, eikä sitä siksi katkaista kielissä, kuten C, jotka pitävät 0x00merkkijonon loppua.

Kaikki tunnetut muunnetun UTF-8:n toteutukset ovat myös CESU-8-yhteensopivia. [ lainaus tarvitaan ]

Edut ja haitat

Edut

  • UTF-8:lla voit koodata minkä tahansa Unicode-merkin. [ 1 ]
  • Se on yhteensopiva US-ASCII:n kanssa, 7-bittisen ohjelmiston koodaus on suora.
  • Helppo tunnistaminen. Tietonäyte voidaan selvästi tunnistaa UTF-8:ksi yksinkertaisella algoritmilla. Oikean tunnistamisen todennäköisyys kasvaa otoksen koon myötä. [ 1 ]
  • UTF-8 säästää tallennustilaa latinalaisilla kirjaimilla olevalle tekstille, jossa US-ASCII:n sisältämät merkit ovat yleisiä verrattuna muihin muotoihin, kuten UTF-16. [ 8 ]
  • Yhden merkin tavusarja ei koskaan ole osa suurempaa sarjaa toiselle merkille, koska se sisältää ajoitustietoja.

Haitat

  • UTF-8 käyttää vaihtuvapituisia symboleja; Tämä tarkoittaa, että eri merkit voidaan koodata eri tavumäärällä. On välttämätöntä kulkea merkkijono alusta alkaen löytääksesi merkin, joka sijaitsee tietyssä paikassa.
  • Ideografiset merkit käyttävät 3 tavua UTF-8:ssa, mutta vain 2 tavua UTF-16:ssa. Siten kiinalaiset, japanilaiset tai korealaiset tekstit vievät enemmän tilaa, kun ne esitetään UTF-8:ssa. [ 8 ]
  • UTF-8 tarjoaa huonomman suorituskyvyn kuin UTF-16 ja UTF-32 laskentakustannuksissa [ 8 ] esimerkiksi lajittelutoiminnoissa.

Viitteet

  1. a b c d e F. Yergeau (marraskuu 2003 ). "RFC 3629 - UTF-8, ISO 10646:n muunnosmuoto" . Internet-yhteiskunta . Haettu 20. toukokuuta 2009 . 
  2. ^ "Siirry Unicode 5.1:een" . Virallinen GoogleBlogi. 5. toukokuuta 2008 _ Haettu 20. toukokuuta 2009 . 
  3. Merkkikoodausten käyttö verkkosivustoille
  4. H. Alvestrand (tammikuu 1998 ). "<RFC 2277> - Virallinen IETF:n merkistöjä ja kieliä koskeva käytäntö" . Internet Engineering Task Force . Haettu 20. toukokuuta 2009 . 
  5. ^ "Kansainvälisten merkkien käyttö Internet-sähköpostissa" . Internet Mail Consortium. 1. elokuuta 1998 . Arkistoitu alkuperäisestä 26. lokakuuta 2007 . Haettu 20. toukokuuta 2008 . 
  6. Unicode-konsortio (lokakuu 2006). "2.5 EncodingForms" . Julkaisussa Julie D. Allen, Joe Becker (et ai.), toim. Unicode 5.0 -standardi (englanniksi) . Addison-Wesley. ISBN  0-321-48091-0 . 
  7. Simon Law ( toukokuu 2005 ). "Globalisaation tuki. Oracle Unicode -tietokantatuki." . Oracle Corporation . Arkistoitu alkuperäisestä 19. huhtikuuta 2009 . Haettu 20. toukokuuta 2009 . 
  8. abc Unicode Consortium (lokakuu 2006). Julie D. Allen, Joe Becker (et ai.), toim. Unicode 5.0 -standardi (englanniksi) . Addison-Wesley. ISBN  0-321-48091-0 . 

Katso myös

Ulkoiset linkit