UTF-8 | ||
---|---|---|
Standard | ISO 10646 ( Unicode ) | |
Idiom | flerspråklig | |
Tilstand | I bruk | |
Tidligere | UTF-1 | |
UTF -8 (8 - bits Unicode Transformation Format ) er et Unicode- og ISO 10646 -tegnkodingsformat som bruker symboler med variabel lengde. UTF-8 ble laget av Robert C. Pike og Kenneth L. Thompson . Det er definert som en standard av < RFC 3629 > fra Internet Engineering Task Force (IETF). [ 1 ] Det er for tiden en av tre kodingsmuligheter anerkjent av Unicode og nettspråk, eller fire i ISO 10646 .
Dens viktigste egenskaper er:
Disse funksjonene gjør det attraktivt når det gjelder koding av e-poster og nettsider. [ 2 ] [ 3 ] IETF krever at alle Internett -protokoller indikerer hvilken koding de bruker for tekst, og at UTF-8 er en av de støttede kodingene. [ 4 ] Internet Mail Consortium ( IMC) anbefaler at alle e-postprogrammer kan lage og vise meldinger kodet med UTF-8. [ 5 ]
UTF-8 ble utviklet av Kenneth L. Thompson under designkriteriene til Rob Pike 2. september 1992 . De implementerte det begge og implanterte det i Plan 9 fra Bell Labs operativsystem . Den ble senere offisielt presentert på USENIX - konferansen i San Diego i januar 1993 . Den ble forfremmet til standard under sponsing av X/Open Joint Internationalization Group (XOJIG) og fikk i prosessen forskjellige navn som FSS/UTF og UTF-2. [ 1 ]
UTF-8 deler Unicode-tegn i flere grupper, basert på antall byte som kreves for å kode dem. Antall byte avhenger utelukkende av tegnkoden som er tildelt av Unicode og antall byte som trengs for å representere den. Fordelingen av karakterer er som følger:
En viktig egenskap ved kodingen er at de mest signifikante bitene i den første byten i en multibytesekvens bestemmer lengden på sekvensen. Disse mest signifikante bitene 110 for to-byte-sekvenser; 1110 for tre-byte sekvenser, etc. Disse bitene gir også synkroniseringsinformasjon som gjør at starten på et symbol kan identifiseres.
Tabellen nedenfor viser hvordan tegn er kodet. Faste verdier i begynnelsen av hver byte garanterer overholdelse av det ikke-overlappende prinsippet, siden de er forskjellige avhengig av plasseringen til byten i strengen. UTF-16-koding er også inkludert for å se hvordan den skiller seg fra et fast antall byte-koding.
UNICODE punktområde |
skalarverdi | UTF-16 | UTF-8 | Karakterer |
000000-00007F | 00000000 0xxxxxxx | 00000000 0xxxxxxx | 0xxxxxxx | Rekkevidde tilsvarende US-ASCII. Enkeltbyte-symboler der den mest signifikante biten er 0 |
000080-0007FF | 00000yyy yyxxxxxx | 00000yyy yyxxxxxx | 110yyyyy 10xxxxxx | To-byte symboler. Den første byten starter med 110, den andre byten starter med 10 |
000800-00FFFF | zzzzyyyy yyxxxxxx | zzzzyyyy yyxxxxxx | 1110zzzz 10yyyyyy 10xxxxxx | Tre-byte symboler. Den første byten starter med 1110, de følgende bytene starter med 10 |
010000-10FFFF | 000uuuuu zzzzyyyy yyxxxxxx | 110110ww wwzzzzyy 110111yy yyxxxxxx (wwww = uuuuu - 1) |
11110uuu 10uuzzzz 10yyyyyy 10xxxxxx | Fire-byte symboler. Den første byten starter med 11110, de følgende bytene starter med 10 |
Etter skjemaet ovenfor vil det være mulig å øke den maksimale størrelsen på symbolet fra 4 til 6 byte. Definisjonen av UTF-8 gitt av Unicode støtter ikke denne muligheten, som støttes av ISO/IEC. [ 6 ]
La oss se, som et eksempel, hvordan tegnet eñe ('ñ') er kodet i UTF-8, som er representert i Unicode som 0x00F1:
For å gjenopprette det opprinnelige kodepunktet, utføres den omvendte prosessen, dekomponerer sekvensene av biter i deres komponenter og tar bare de nødvendige bitene.
Kodingsregler setter derfor grenser for strengene som kan dannes. I henhold til standarden må en strengtolk avvise som ugyldige, og ikke forsøke å tolke, misformede tegn. En UTF-8-strengtolker kan avbryte ved å signalisere en feil, hoppe over feilaktige tegn eller erstatte dem med et U+FFFD-tegn ( ERSTATTNINGSKARAKTER ).
Følgende er kodefeil:
Når det plasseres i begynnelsen av en UTF-8-streng, kalles et tegn 0xFEFF, kodet i UTF-8 som 0xEF, 0xBB, , et Byte Order Mark (BOM) og identifiserer innholdet som en streng med Unicode-tegn. Når dette tegnet finnes andre steder i strengen, skal det tolkes med sin opprinnelige Unicode-betydning ( ). Siden UTF-8 er en koding der informasjonsenheten er byten, har den ikke den nytten som den har i UTF-16 og UTF-32 til å identifisere rekkefølgen av byte i et ord ( endianness ). 0xBFZWNBSP
Spesifikasjonen anbefaler eller fraråder bruk av stykkliste, selv om den fraråder å fjerne den hvis den eksisterer som et sikkerhetstiltak, for å forhindre feil i digitale signaturapplikasjoner osv. Den advarer også om at den må elimineres i sammenkoblingsoperasjoner for å forhindre at den holdes i ikke-startposisjoner.
Følgende kodingsstandarder skiller seg fra og er derfor inkompatible med UTF-8-spesifikasjonen.
Denne implementeringen utfører en direkte oversettelse av den representerte tegnstrengen med UTF-16 i stedet for å kode Unicode-kodepunktene. Resultatet er forskjellige kodinger for Unicode-tegn med kode større enn 0xFFFF. [ 1 ] Oracle implementerer fra og med versjon 8 CESU-8 med aliaset UTF8 , og fra og med versjon 9, standard UTF-8 med et annet alias. [ 7 ] Java og Tcl bruker denne kodingen. [ referanse nødvendig ]
Med modifisert UTF-8 er null -tegnet kodet som 0xC080i stedet for 0x00. På denne måten vil ikke en tekst som inneholder null-tegnet inneholde byten 0x00og vil derfor ikke bli avkortet på språk som C som vurderer 0x00en slutt på strengen.
Alle kjente implementeringer av modifisert UTF-8 er også CESU-8-kompatible. [ referanse nødvendig ]