UTF-8

Unicode
Codifiche
UCS
Mappatura
Testo bidirezionale
BOM
Unificazione Han
Unicode eHTML

UTF-8 (Unicode Transformation Format, 8 bit) è una codifica di caratteri Unicode in sequenze di lunghezza variabile di byte, creata da Rob Pike e Ken Thompson. UTF-8 usa gruppi di byte per rappresentare i caratteri Unicode, ed è particolarmente utile per il trasferimento tramite sistemi di posta elettronica a 8-bit.

Storia

UTF-8 è stato ideato da Ken Thompson e Rob Pike il 2 settembre 1992 su una tovaglietta in una tavola calda del New Jersey. Il giorno dopo Pike e Thompson l'hanno implementato e hanno aggiornato Plan 9, il loro Sistema operativo, per usarlo.

UTF-8 è stato presentato ufficialmente nel gennaio del 1993 a San Diego in occasione della conferenza annuale di USENIX.

Caratteristiche generali

UTF-8 usa da 1 a 4 byte per rappresentare un carattere Unicode. Per esempio un solo byte è necessario per rappresentare i 128 caratteri dell'alfabeto ASCII, corrispondenti alle posizioni Unicode da U+0000 a U+007F.

Quattro byte possono sembrare troppi per un solo carattere; tuttavia questo è richiesto solo per i caratteri che stanno fuori dal Basic Multilingual Plane, generalmente molto rari. Inoltre anche UTF-16 (la principale alternativa a UTF-8) richiede quattro byte per questi caratteri. Quale sia più efficiente, UTF-8 o UTF-16, dipende dall'intervallo di caratteri utilizzati, e l'uso di algoritmi di compressione tradizionali riduce in maniera significativa la differenza tra le due codifiche. Per brevi brani di testo, su cui gli algoritmi di compressione tradizionali non sono efficienti ed è importante una ridotta occupazione di memoria, si potrebbe utilizzare lo Schema di compressione standard per Unicode.

La IETF (Internet Engineering Task Force) richiede che tutti i protocolli Internet identifichino la codifica dei caratteri utilizzata, e che siano in grado di utilizzare almeno UTF-8.

Descrizione tecnica

UTF-8 viene descritto nello standard RFC 3629 (UTF-8, un formato di trasformazione dell'ISO 10646). Brevemente, i bit che compongono un carattere Unicode vengono suddivisi in gruppi, che vengono poi ripartiti tra i bit meno significativi all'interno dei byte che formano la codifica UTF-8 del carattere.

I caratteri il cui valore unicode è inferiore a U+0080 vengono rappresentati con un singolo byte contenente il loro valore; essi corrispondono esattamente ai 128 caratteri ASCII. In tutti gli altri casi sono necessari fino a 4 byte, ognuno di questi con il bit più significativo impostato a 1, in modo da distinguerli dalla rappresentazione dei caratteri dell'alfabeto ASCII a 7 bit, in particolare quelli il cui codice unicode è inferiore a U+0020, tradizionalmente utilizzati come caratteri di controllo.

Intervallo Unicode
esadecimale
UTF-16 UTF-8
binario
Note
0x000000-0x00007F 00000000 0XXXXXXX 0XXXXXXX Caratteri equivalenti al codice ASCII; i byte iniziano con 0 e da soli indicano un carattere
0x000080-0x0007FF 00000XXX XXXXXXXX 110XXXXX 10XXXXXX il primo byte inizia per 110 o 1110, il successivo(i) con 10 e devono essere concatenati per formare un carattere
0x000800-0x00FFFF XXXXXXXX XXXXXXXX 1110XXXX 10XXXXXX 10XXXXXX
0x010000-0x10FFFF 110110XX XXXXXXXX
110111XX XXXXXXXX
11110XXX 10XXXXXX 10XXXXXX 10XXXXXX Confronto tra UTF-16 e UTF-8: UTF-16 richiede l'uso di coppie surrogate: viene sottratto il valore esadecimale 0x10000, in modo che la sequenza dei bit non coincida con quella usata da UTF-8

Per esempio, il carattere alef (א), corrispondente all'Unicode U+05D0, viene rappresentato in UTF-8 con questo procedimento:

  • ricade nell'intervallo da 0x0080 a 0x07FF. Secondo la tabella verrà rappresentato con due byte (110XXXXX 10XXXXXX);
  • l'esadecimale 0x05D0 equivale al binario 101-1101-0000;
  • gli undici bit vengono copiati in ordine nelle posizioni marcate con "X": 110-10111 10-010000;
  • il risultato finale è la coppia di byte 11010111 10010000, o in esadecimale 0xD7 0x90.

Riassumendo, i primi 128 caratteri vengono rappresentati con un singolo byte. I successivi 1920 ne richiedono due, e comprendono gli alfabeti Latino con diacritici, Greco, Cirillico, Copto, Armeno, Ebraico e Arabo. I restanti caratteri nel Basic Multilingual Plane hanno bisogno di tre byte, tutto il resto di quattro.

Potenzialmente, UTF-8 sarebbe in grado di usare sequenze fino a 6 byte, coprendo l'intervallo da U+0000 a U+7FFFFFFF (31 bit), ma nel 2003 UTF-8 è stato limitato dallo standard RFC 3629 per coprire solo l'intervallo descritto formalmente nello standard Unicode, ovvero da U+0000 a U+10FFFF. In precedenza i soli byte che non potevano comparire in una sequenza UTF-8 valida erano 0xFE e 0xFF. Con l'introduzione del precedente limite, il numero di byte non usati dalla codifica UTF-8 è salito a 13: 0xC0, 0xC1, e da 0xF5 a 0xFF. Anche se la nuova definizione di UTF-8 limita in modo consistente l'insieme di caratteri Unicode rappresentabili, il problema delle rappresentazioni multiple dello stesso carattere, un potenziale rischio per la sicurezza, scompare in quanto ognuna di queste sequenze conterrebbe uno dei byte non usati, risultando non valida.

UTF-8 Modificato

Il linguaggio di programmazione Java, che usa UTF-16 come rappresentazione interna dei caratteri, usa per la loro serializzazione su file una variazione non standard di UTF-8[1].

Ci sono due differenze tra la codifica UTF-8 standard e quella modificata. La prima differenza è che il carattere nullo (U+0000) viene rappresentato con due byte anziché uno, nello specifico come 11000000 10000000 (0xC0 0x80). In questo modo ci si assicura che nessuna stringa codificata venga troncata prematuramente perché contenente il byte null (0x00), interpretato da alcuni linguaggi di programmazione (ad esempio il C) come terminatore della stringa.

La seconda differenza riguarda la rappresentazione dei caratteri al di fuori del BMP (Basic Multilingual Plane). Utilizzando l'UTF-8 standard questi caratteri vengono rappresentati con 4 byte, secondo il formato nella tabella precedente. Con UTF-8 modificato questi caratteri vengono prima rappresentati come coppie surrogate (come in UTF-16) e successivamente entrambi gli elementi della coppia vengono codificati in UTF-8. Il motivo di questa differenza non è ovvio. In Java un carattere è lungo 16 bit, quindi alcuni caratteri Unicode devono essere rappresentati come sequenze di due caratteri. Questo aspetto del linguaggio è precedente all'introduzione dei piani supplementari in Unicode, ma è importante sia per fattori legati alle prestazioni, che per la retrocompatibilità, ed è quindi improbabile che venga corretto. L'encoding modificato assicura che una stringa codificata possa essere decodificata un carattere (a 16 bit) per volta, anziché un carattere Unicode per volta. Sfortunatamente questo vuol dire che i caratteri che richiedono 4 byte per essere rappresentati in UTF-8, siano rappresentati in UTF-8 modificato con sequenze di 6 byte.

Caratteristiche di UTF-8

In conseguenza dei meccanismi di funzionamento di UTF-8, le sequenze di byte godono di queste proprietà:

  • Il bit più significativo di ogni sequenza composta di un singolo byte è sempre 0.
  • I bit più significativi del primo di una sequenza di più byte indicano la lunghezza della sequenza. Questi bit sono 110 per le sequenze di due byte, e 1110 per quelle di tre.
  • I byte successivi al primo in una sequenza composta da più byte hanno sempre 10 come bit più significativi.

UTF-8 è stato progettato per soddisfare queste tre proprietà, in modo da garantire che nessuna sequenza di byte corrispondente a uno specifico carattere sia contenuta in una sequenza più lunga, usata per codificare un carattere diverso. Grazie a questa caratteristica la ricerca di parole o frasi all'interno di un testo può essere effettuata tramite confronto byte per byte; qualche precedente sistema di codifica basato su sequenze di lunghezza variabile di byte (per esempio Shift-JIS) non godeva di questa proprietà, rendendo gli algoritmi di confronto tra stringhe complicati. Nonostante si possa obiettare che questa caratteristica aggiunga ridondanza alla codifica del testo, i vantaggi sono maggiori degli svantaggi; inoltre la compressione dei dati non è uno degli scopi di UTF-8, e va considerata separatamente. Infine, ancora grazie a questa proprietà, se uno o più byte andassero persi per errori di trasmissione o per corruzione dei dati, sarebbe possibile risincronizzare la decodifica all'inizio del carattere successivo, limitando i danni.

Forme lunghe, input non valido e considerazioni di sicurezza

Il comportamento di un decoder in presenza di input non valido è pressoché indefinito. Ci sono molti modi in cui un decoder può reagire alla presenza di input non valido

  1. Inserire un carattere che rimpiazzi quello non valido (p.e. '?', '�')
  2. Saltare il carattere non valido
  3. Interpretare il carattere come proveniente da un altro Repertorio di caratteri (spesso Latin-1)
  4. Ignorare l'errore e continuare come se il carattere fosse simile a qualche codice UTF-8 valido
  5. Segnalare un errore

I decoder potrebbero ovviamente comportarsi in modo diverso di fronte a diversi tipi di input non valido.

Tutte le possibilità hanno vantaggi e svantaggi, ma bisogna prestare particolare attenzione alla sicurezza se la verifica di validità dell'input viene compiuta prima della conversione da UTF-8.

Le forme lunghe (in cui un carattere viene codificato con più byte di quelli strettamente necessari, ma sempre nel rispetto delle regole precedenti) sono uno dei tipi di input che presentano maggiori problemi. Lo standard corrente prescrive che queste forme non vengano decodificate, ma specifiche più vecchie si limitavano a segnalare il problema, e molti decoder dei più semplici procedono alla decodifica senza nessun messaggio di avvertimento. Le forme lunghe sono state usate per scavalcare i controlli di sicurezza in prodotti di alto profilo, incluso il web server Internet Information Services (IIS) di Microsoft

Per mantenere la sicurezza nel caso di input non valido ci sono due opzioni. La prima è di decodificare il codice UTF-8 prima di fare qualsiasi controllo di validità necessario sull'input. La seconda è di usare un decoder più rigido, che nel caso di input non valido restituisca un errore o un testo che l'applicazione consideri innocuo.

Vantaggi

  • Il vantaggio più ovvio di qualsiasi codifica UTF è che permette di rappresentare tutti i caratteri, a differenza di codifiche più vecchie.
  • Alcuni caratteri di Unicode (per esempio l'alfabeto latino) occupano in UTF-8 un solo byte, altri richiedono fino a quattro byte. In generale un testo codificato in UTF-8 occuperà meno spazio del corrispondente UTF-16 o UTF-32 se contiene molti caratteri ASCII a 7 bit.
  • Una sequenza di byte che codifica un carattere non può apparire come parte di una sequenza più lunga che codifica un altro carattere, come succedeva per codifiche a lunghezza variabile meno recenti (vedi la sezione precedente).
  • Il primo byte di una sequenza è sufficiente a determinarne la lunghezza (è sufficiente contare il numero di bit più significativi con valore uno). Questo rende molto semplice estrarre una sotto-stringa da una stringa più lunga, senza bisogno di decodificare la sequenza di byte UTF-8.
  • La maggioranza del software esistente (inclusi i sistemi operativi) è stata scritta senza tener conto di Unicode, e l'uso di Unicode creerebbe problemi di compatibilità. Per esempio la libreria standard del C marca la fine di una stringa con un byte nullo (0x00). Usando UTF-16 il carattere Unicode "A" verrebbe codificato come 0x0041. Il primo byte verrebbe trattato come il marcatore di fine stringa, e il secondo e tutti i successivi verrebbero ignorati. UTF-8 è pensato in modo che nessuno dei byte codificati possa assumere uno dei valori speciali del codice ASCII, evitando questo e problemi simili.
  • UTF-8 è la codifica predefinita per il formato XML.

Svantaggi

  • UTF-8 usa sequenze di lunghezza variabile, cioè singoli caratteri possono venire rappresentati con sequenze di byte di lunghezze diverse.
  • Gli ideogrammi vengono rappresentati in UTF-8 con tre byte, mentre ne richiedono solo due in UTF-16. Di conseguenza i testi in Cinese / Giapponese / Coreano, oltre ad alcuni gruppi di caratteri Unicode meno noti, occupano più spazio rispetto alla codifica in UTF-16.

Note

  1. ^ Documentazione della classe java.io.DataInput, sezione "Modified UTF-8", su download.oracle.com. URL consultato il 4 maggio 2011.

Voci correlate

Altri progetti

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

Read other articles:

Christopher A. SimsLahir21 Oktober 1942 (umur 81)Washington, D.C.KebangsaanAmerikaInstitusiPrinceton UniversityBidangMacroeconomicsEconometricsTime seriesAlma materHarvard University, (A.B, PhD)UC Berkeley[1]KontribusiUse of vector autoregressionPenghargaanNobel Ekonomi (2011)Informasi di IDEAS / RePEc Christopher Albert Chris Sims (lahir 21 Oktober 1942) adalah seorang ahli ekonometrika dan ekonomi makro. econometrician and macroeconomist. Saat ini ia menjadi prof...

 

Musical instrument organization in Australia Organ Historical Trust of AustraliaFoundedMay 1977 (1977-05)TypeNational peak body for pipe organ preservation and conservationLocationAustraliaArea served Australia, New ZealandKey peopleSteve Kaesler OAM (Chairman)[1]Websitewww.ohta.org.au The Organ Historical Trust of Australia (OHTA) is a national organisation which works towards: the protection, conservation and restoration of pipe organs in Australia, the preservation of rec...

 

Yuu Yamagata Nombre Yuko YamagataNacimiento Tomakomai, Japón6 de julio de 1976 (47 años)[1]​Nombres artísticos Miss Yuu XPeso 62 kg (136 lb)Estatura 1,64 m (5′ 5″)[2]​Nacionalidad JaponesaEntrenador Takao YoshidaMariko YoshidaEstadísticasDebut 2000[editar datos en Wikidata] Yuu Yamagata (en japonés: 山縣優, Yamagata Yuu) (Tomakomai, 6 de julio de 1976) es una luchadora profesional japonesa, conocida por su paso como luchadora independiente en p...

Republik Tschad جمهورية تشاد (arabisch)République du Tchad (französisch) Dschumhūriyyat Tschād (arabisch) Flagge Wappen Wahlspruch: «الاتحاد، العمل، التقدم»«Unité, Travail, Progrès»„Einigkeit, Arbeit, Fortschritt“ Amtssprache Arabisch und Französisch Hauptstadt N’Djamena Staats- und Regierungsform Militärdiktatur (de facto)präsidentielle Republik (de jure) Staatsoberhaupt Vorsitzender des MilitärratesMahamat Idriss Déby Itno Regierungschef P...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أبريل 2019) آر. بروس كينغ معلومات شخصية الميلاد 27 فبراير 1938 (85 سنة)  مواطنة الولايات المتحدة  الحياة العملية المدرسة الأم جامعة هارفارد  المهنة كيميائي،  وعالم ك

 

Aspect of history This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: History of modern Egypt – news · newspapers · books · scholar · JSTOR (December 2007) (Learn how and when to remove this template message) Part of a series on the History of Egypt Prehistoric Egypt Predynastic Period6000–3000 BC Ancient Egyp...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Bill Walsh College Football – news · newspapers · books · scholar · JSTOR (October 2017) (Learn how and when to remove this template message) 1993 video gameBill Walsh College FootballCover artDeveloper(s)High Score Productions (Sega Genesis & Sega CD) Visu...

 

ZNF37A المعرفات الأسماء المستعارة ZNF37A, KOX21, ZNF37, zinc finger protein 37A معرفات خارجية الوراثة المندلية البشرية عبر الإنترنت 616085 HomoloGene: 66189 GeneCards: 7587 علم الوجود الجيني الوظيفة الجزيئية • ‏GO:0001131، ‏GO:0001151، ‏GO:0001130، ‏GO:0001204 DNA-binding transcription factor activity• ربط دي إن إي• ربط أيون فلزي• ربط حمض نووي• ...

 

As referências deste artigo necessitam de formatação. Por favor, utilize fontes apropriadas contendo título, autor e data para que o verbete permaneça verificável. (Junho de 2020) Eva Zeisel Eva Zeisel Nascimento Striker Éva Amália13 de novembro de 1906Budapeste Morte 30 de dezembro de 2011 (105 anos)New City, Nova Iorque Sepultamento Mount Zion Cemetery Cidadania Hungria, Estados Unidos Ocupação escultora, ceramista, designer Prêmios honorary Royal Designer for Industry (2004) Pá...

Cape- or blanket-like outer garment For other uses, see Poncho (disambiguation). Araucanos and Huasos in Chile, 19th century A market scene Ruana in Bogotá, circa 1860 A Peruvian chalán dancing marinera on a Peruvian Paso horse A poncho (Spanish pronunciation: [ˈpontʃo]; Quechua: punchu; Mapudungun: pontro; blanket, woolen fabric)[1][2][3] is a kind of plainly formed, loose outer garment originating in the Americas, traditionally and still usually made of f...

 

Meta-puzzle computer game from 1987 1987 video gameThe Fool's ErrandMacintosh cover artDeveloper(s)Cliff JohnsonPublisher(s)Miles ComputingPlatform(s)Mac OS, MS-DOS, Amiga, Atari STRelease1987Genre(s)PuzzleMode(s)Single-player The Fool's Errand is a 1987 computer game by Cliff Johnson. It is a meta-puzzle game with storytelling, visual puzzles, and a cryptic treasure map. It is the tale of a wandering Fool who seeks his fortune in the Land of Tarot and braves the enchantments of the High Prie...

 

Pouligny-Saint-PierreNegara asalPrancisSumber susuKambingDipasteurisasiTidakTeksturLembutWaktu pematangan2-5 mingguSertifikasiAOC[1] Pouligny-Saint-Pierre adalah keju dari Prancis yang berbentuk piramida tumpul dan dibuat dengan menggunakan susu kambing mentah.[1] Keju ini dinamakan berdasarkan sebuah desa yang bernama sama.[1] Sisi bagian bawah dari keju ini memiliki panjang 9 sentimeter sedangkan sisi bagian atasnya 2.5 sentimeter serta tinggi 12 sentimeter.[2 ...

Model 40 Role Mail planeType of aircraft Manufacturer Boeing First flight July 20, 1925 Introduction July 1, 1927 Primary users Boeing Air TransportVarney Air LinesPacific Air Transport Number built ca. 80 The Boeing Model 40 was a United States mail plane of the 1920s. It was a single-engined biplane that was widely used for airmail services in the United States in the 1920s and 1930s, especially by airlines that later became part of United Airlines. It became the first aircraft built b...

 

1992 novel by Kingsley Amis The Russian Girl Cover of first edition (hardcover)AuthorKingsley AmisCountryUnited KingdomLanguageEnglishGenreComedy novelPublisherHutchinsonPublication date1992Media typePrint (hardback & paperback)ISBN0091745365 The Russian Girl is a 1992 comedy novel by Kingsley Amis published by Hutchinson & Co. Plot Set in the early nineties the novel describes in comic detail events set in train by the arrival in London of Russian poet Anna Danilova. Richard Vai...

 

Comic book character Comics character MagogMagog as depicted in Justice Society of America Kingdom Come Special: Magog #1 (November 2008). Art by Alex Ross.Publication informationPublisherDC ComicsFirst appearanceKingdom Come #1(May 1996)Created byMark Waid (writer)Alex Ross (artist)In-story informationAlter egoLance Corporal David ReidSpeciesHuman CyborgTeam affiliationsJustice BattalionUnited States Marine CorpsJustice Society of AmericaJustice LeagueNotable aliasesLance The New Man of Tomo...

Time in Mongolia Western Mongolia Time (UTC+7) Eastern Mongolia Time (UTC+8) Time in Mongolia is officially represented by the Mongolian Standard Time (UTC+08:00). However, the far western provinces of Khovd, Uvs and Bayan-Ölgii use UTC+07:00. Daylight saving time Mongolia used daylight saving time in 1983–1998, 2001–2006[1] and 2015–2016.[2] IANA time zone database The IANA time zone database contains three zones for Mongolia in the file zone.tab. coordinates* TZ* comm...

 

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目缺少有關生平經歷的信息。 (2021年4月13日)請擴充此條目相關信息。討論頁可能有詳細細節。 此生者传记条目需要补充更多可供查證的来源。 (2021年4月13日)请协助補充可靠来源,无法查证的在世人物内容将被立即移除。 關令翹配音演员罗马拼音Kwan Ning Kiu英文名Gil昵称關生、Gil爺出生 (1985-11-12) 198...

 

Road in Scotland This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: A749 road – news · newspapers · books · scholar · JSTOR (August 2008) (Learn how and when ...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Wanna Be single album – news · newspapers · books · scholar · JSTOR (October 2012) (Learn how and when to remove this template message) 2012 single album by AOAWanna BeSingle album by AOAReleasedOctober 10, 2012Recorded2012GenreK-poprockLength11:22...

 

National legislature of the Philippines Legislature of the Philippines redirects here. For a comprehensive list about the historical legislatures of the Philippines, see List of legislatures of the Philippines. For the current meeting of the Congress of the Philippines, see 19th Congress of the Philippines. Congress of the Philippines Kongreso ng Pilipinas19th Congress of the Philippines Seals of the Senate (left) and of the House of Representatives (right)TypeTypeBicameral HousesSenateH...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!