31
Soluzione esercizi 2° Soluzione esercizi 2° lezione lezione Scritta Devanagari: Scritta Devanagari: UTF-16 UTF-16 Primo code point 0x10000 Primo code point 0x10000 (D800 DC00): (D800 DC00): Linear B syllable B008 A Linear B syllable B008 A Ultimo code point 0x10FFFF Ultimo code point 0x10FFFF (DBFF DFFF): non character (DBFF DFFF): non character UTF-24: UTF-24: http://stackoverflow.com/questions/10143836/why-is-there-no-utf-24 http://stackoverflow.com/questions/10143836/why-is-there-no-utf-24 UTF-8 interpretato come Latin-1: caffè UTF-8 interpretato come Latin-1: caffè helloworld.txt: UTF-16BE helloworld.txt: UTF-16BE 0000 1001 0010 1010 0000 1001 0010 1010 09 2A 09 2A 0000 1001 0100 0010 0000 1001 0100 0010 09 42 09 42 0000 1001 0011 0000 0000 1001 0011 0000 09 30 09 30 0000 1001 0100 1101 0000 1001 0100 1101 09 4D 09 4D 0000 1001 0010 0100 0000 1001 0010 0100 09 24 09 24 0000 1001 0011 1111 0000 1001 0011 1111 09 3F 09 3F पपपपपप पपपपपप( Supply Supply) http://translate.google.com/#hi/ http://translate.google.com/#hi/ en/ en/ पपपपपप पपपपपप

Soluzione esercizi 2° lezione

  • Upload
    luther

  • View
    48

  • Download
    0

Embed Size (px)

DESCRIPTION

Soluzione esercizi 2° lezione. Scritta Devanagari: UTF-16 Primo code point 0x10000 (D800 DC00): Linear B syllable B008 A Ultimo code point 0x10FFFF (DBFF DFFF): non character UTF-24: http://stackoverflow.com/questions/10143836/why-is-there-no-utf-24 - PowerPoint PPT Presentation

Citation preview

Page 1: Soluzione esercizi 2° lezione

Soluzione esercizi 2° lezioneSoluzione esercizi 2° lezione

Scritta Devanagari: Scritta Devanagari: UTF-16UTF-16

• Primo code point 0x10000 Primo code point 0x10000 (D800 DC00): (D800 DC00): Linear B syllable B008 ALinear B syllable B008 A

• Ultimo code point 0x10FFFF Ultimo code point 0x10FFFF (DBFF DFFF): non character(DBFF DFFF): non character

UTF-24: UTF-24: http://stackoverflow.com/questions/10143836/why-is-there-no-utf-24http://stackoverflow.com/questions/10143836/why-is-there-no-utf-24

UTF-8 interpretato come Latin-1: caffèUTF-8 interpretato come Latin-1: caffè helloworld.txt: UTF-16BEhelloworld.txt: UTF-16BE

पप 0000 1001 0010 10100000 1001 0010 1010 09 2A09 2A

0000 1001 0100 00100000 1001 0100 0010 09 4209 42

रर 0000 1001 0011 00000000 1001 0011 0000 09 3009 30

0000 1001 0100 11010000 1001 0100 1101 09 4D09 4D

तत 0000 1001 0010 01000000 1001 0010 0100 09 2409 24

िि 0000 1001 0011 11110000 1001 0011 1111 09 3F09 3F

परतितपरतित((SupplySupply))http://translate.google.com/#hi/en/http://translate.google.com/#hi/en/परतितपरतित

Page 2: Soluzione esercizi 2° lezione

Varianti UTF-8: CESU-8Varianti UTF-8: CESU-8

Compatibility Encoding Scheme for UTF-16Compatibility Encoding Scheme for UTF-16

Codifica “complementare”: per i code Codifica “complementare”: per i code point fuori dal BMP utilizza i surrogati e li point fuori dal BMP utilizza i surrogati e li codifica in UTF-8. codifica in UTF-8.

Utilizza 6 byte per i caratteri fuori dal BMP: Utilizza 6 byte per i caratteri fuori dal BMP: codifica il code point in UTF-16 con la codifica il code point in UTF-16 con la coppia dei code point surrogati e quindi coppia dei code point surrogati e quindi codifica a sua volta ciascun elemento della codifica a sua volta ciascun elemento della coppia con la codifica UTF-8 di 3 bytecoppia con la codifica UTF-8 di 3 byte

Page 3: Soluzione esercizi 2° lezione

CESU-8 e UTF-8: esempioCESU-8 e UTF-8: esempio

C3 A8C3 A8

00 E800 E8

C3 A8C3 A8

èè

U+00E8U+00E8

ED A0 8C ED B2 80ED A0 8C ED B2 80E4 B8 ADE4 B8 AD4D4DCESU-8CESU-8

D8 0C DC 80D8 0C DC 804E 2D4E 2D00 4D00 4DUTF-16UTF-16

F0 93 82 80F0 93 82 80E4 B8 ADE4 B8 AD4D4DUTF-8UTF-8

中中MM

U+13080U+13080U+4E2DU+4E2DU+004DU+004D

Page 4: Soluzione esercizi 2° lezione

Varianti UTF-8: Modified UTF-8Varianti UTF-8: Modified UTF-8 U+0000 codificato come 0xC0 0x80 (schema U+0000 codificato come 0xC0 0x80 (schema

identico a UTF-8 ma non valido perché non è la identico a UTF-8 ma non valido perché non è la sequenza più corta possibile)sequenza più corta possibile)

Stringhe in questa codifica non contengono mai il Stringhe in questa codifica non contengono mai il byte nullo (00000000) che può essere utilizzato byte nullo (00000000) che può essere utilizzato quindi come terminatore di stringa da certe quindi come terminatore di stringa da certe funzioni “tradizionali” di elaborazione stringhefunzioni “tradizionali” di elaborazione stringhe

Code point fuori dal BMP come in CESU-8Code point fuori dal BMP come in CESU-8

Utilizzato in Java per la serializzazione degli Utilizzato in Java per la serializzazione degli oggetti e altri usi “interni” di rappresentazione oggetti e altri usi “interni” di rappresentazione stringhe.stringhe.

Page 5: Soluzione esercizi 2° lezione

BOMBOM Concepito per risolvere il problema dell’endianness nello scambio dati Concepito per risolvere il problema dell’endianness nello scambio dati Esistono due varianti di UTF-16 (e due varianti di UTF-32): UTF-16LE e Esistono due varianti di UTF-16 (e due varianti di UTF-32): UTF-16LE e

UTF-16BE.UTF-16BE. Il BOM (Byte Order Mark) è un code point riservato all’uso speciale di Il BOM (Byte Order Mark) è un code point riservato all’uso speciale di

stabilire l’endian-ness di un flusso dati (o di un file)stabilire l’endian-ness di un flusso dati (o di un file) Viene inserito come primo code point del flusso dati o del fileViene inserito come primo code point del flusso dati o del file Il BOM è U+FEFFIl BOM è U+FEFF in UTF-16BE è codificato 0xFE 0xFFin UTF-16BE è codificato 0xFE 0xFF Il code point U+FFFE è un “non carattere”: il suo uso non è consentito (e Il code point U+FFFE è un “non carattere”: il suo uso non è consentito (e

non ha senso)non ha senso) Se quindi in un file leggiamo come primo carattere il code point U+FFFE Se quindi in un file leggiamo come primo carattere il code point U+FFFE

(codificato ad esempio 0xFF 0xFE) stiamo sbagliando a interpretare (codificato ad esempio 0xFF 0xFE) stiamo sbagliando a interpretare l’ordine dei byte: da qui conosciamo l’endianness del resto della l’ordine dei byte: da qui conosciamo l’endianness del resto della trasmissionetrasmissione

Storicamente (Unicode 2.0) il carattere ha il significato di “zero-width Storicamente (Unicode 2.0) il carattere ha il significato di “zero-width non-breaking space” (ZWNBSP): oggi questo uso è deprecato e tale non-breaking space” (ZWNBSP): oggi questo uso è deprecato e tale funzione è ricoperta dal code point U+2060 (WORD JOINER).funzione è ricoperta dal code point U+2060 (WORD JOINER).

A causa di questa origine potrebbero succedere cose impreviste A causa di questa origine potrebbero succedere cose impreviste concatenando due file UTF-16 con utility UNIX come concatenando due file UTF-16 con utility UNIX come catcat

UTF-8 è byte oriented: non ci sarebbe bisogno di inserire il BOM. UTF-8 è byte oriented: non ci sarebbe bisogno di inserire il BOM. Tuttavia lo standard Unicode afferma che può essere utilizzato per Tuttavia lo standard Unicode afferma che può essere utilizzato per rendere chiaro il fatto che si sta utilizzando la codifica UTF-8 (EF BB BF)rendere chiaro il fatto che si sta utilizzando la codifica UTF-8 (EF BB BF)

Page 6: Soluzione esercizi 2° lezione

I caratteri di controllo (1/2)I caratteri di controllo (1/2)

Quando di parla di “caratteri di controllo” si intendono i Quando di parla di “caratteri di controllo” si intendono i caratteri di controllo ASCII (C0 controls) e ISO 8859 (C1 caratteri di controllo ASCII (C0 controls) e ISO 8859 (C1 controls)controls)

Di fatto non si tratta di caratteri: si dovrebbe parlare di Di fatto non si tratta di caratteri: si dovrebbe parlare di control codescontrol codes

Si possono “digitare” alla tastiera in combinazione con il Si possono “digitare” alla tastiera in combinazione con il tasti CTRL (p.e. CTRL+C = U+0003)tasti CTRL (p.e. CTRL+C = U+0003)

Erano utilizzati inizialmente per le telescriventi (C0 controls)Erano utilizzati inizialmente per le telescriventi (C0 controls) Oggi hanno comunque un uso importante (break control, Oggi hanno comunque un uso importante (break control,

movimento cursore, formattazione, sequenze di escape, movimento cursore, formattazione, sequenze di escape, etc..)etc..)

I C1 controls sono utilizzati in ISO 2022 per switchare tra I C1 controls sono utilizzati in ISO 2022 per switchare tra diversi encodingdiversi encoding

L’uso originario nelle telescriventi ha reso alcuni di essi L’uso originario nelle telescriventi ha reso alcuni di essi caratteri di “formattazione” (CR, LF, HT, VT, etc..) che caratteri di “formattazione” (CR, LF, HT, VT, etc..) che determinano l’aspetto di un testodeterminano l’aspetto di un testo

Unicode include ovviamente tutti i caratteri di controllo C0 e Unicode include ovviamente tutti i caratteri di controllo C0 e C1, tuttavia non standardizza la loro funzione.C1, tuttavia non standardizza la loro funzione.

Page 7: Soluzione esercizi 2° lezione

I caratteri di controllo (2/2)I caratteri di controllo (2/2) Unicode introduce alcuni code points di significato speciale Unicode introduce alcuni code points di significato speciale

che potrebbero essere considerati dei veri e propri “caratteri che potrebbero essere considerati dei veri e propri “caratteri di controllo”: Layout controls e Special operators come ad di controllo”: Layout controls e Special operators come ad esempio LSEP, PSEP, LRM, RLM, IAFS, etc.. tuttavia questi esempio LSEP, PSEP, LRM, RLM, IAFS, etc.. tuttavia questi caratteri vengono considerati “di punteggiatura” e quando si caratteri vengono considerati “di punteggiatura” e quando si parla di caratteri di controllo si intendono i C0 e C1 controlsparla di caratteri di controllo si intendono i C0 e C1 controls

Un carattere di controllo non ha una rappresentazione Un carattere di controllo non ha una rappresentazione grafica, ma in alcuni contesti è necessario rappresentarli grafica, ma in alcuni contesti è necessario rappresentarli (p.e. istruzioni): a tale scopo esiste un blocco Unicode dedito (p.e. istruzioni): a tale scopo esiste un blocco Unicode dedito a questa funzione (control pictures). a questa funzione (control pictures). Si tratta di caratteri che rappresentano i caratteri di Si tratta di caratteri che rappresentano i caratteri di controllo, ma sono da questi controllo, ma sono da questi completamentecompletamente distinti distinti

Esempio: il carattere di controllo ESCAPE U+001B può essere Esempio: il carattere di controllo ESCAPE U+001B può essere rappresentato dal carattere grafico U+241B (SYMBOL FOR rappresentato dal carattere grafico U+241B (SYMBOL FOR ESCAPE) con un glifo specifico: ESCAPE) con un glifo specifico:

Alcuni programmi (p.e. editor di testo) potrebbero Alcuni programmi (p.e. editor di testo) potrebbero rappresentare i caratteri di controllo in qualche forma grafica rappresentare i caratteri di controllo in qualche forma grafica (^C, CTRL-C, sigla in negativo): di fatto è come se (^C, CTRL-C, sigla in negativo): di fatto è come se utilizzassero una certa combinazione di glifi per utilizzassero una certa combinazione di glifi per rappresentare quel carattere particolare.rappresentare quel carattere particolare.

http://www.cs.tut.fi/~jkorpela/chars/c0.htmlhttp://www.cs.tut.fi/~jkorpela/chars/c0.html

Page 8: Soluzione esercizi 2° lezione

Private Use AreaPrivate Use Area PUA in BMP: 6400 code pointsPUA in BMP: 6400 code points SPUA-A, SPUA-B (65.534 code points ciascuno)SPUA-A, SPUA-B (65.534 code points ciascuno) Usi proprietari (Emoticons Whatsapp)Usi proprietari (Emoticons Whatsapp) Utilizzi privati coordinati:Utilizzi privati coordinati:

• ConScript Unicode Registry (CSUR)ConScript Unicode Registry (CSUR)Progetto più seguito, contiene sistemi di scrittura di fantasia Progetto più seguito, contiene sistemi di scrittura di fantasia come il Klingon di Star Trek e il Tengwar di Tolkiencome il Klingon di Star Trek e il Tengwar di Tolkienhttp://en.wikipedia.org/wiki/ConScript_Unicode_Registryhttp://en.wikipedia.org/wiki/ConScript_Unicode_Registry

• Medieval Unicode Font Initiative (MUFI)Medieval Unicode Font Initiative (MUFI)Abbreviazioni, legature e varianti dei testi medievali (152 Abbreviazioni, legature e varianti dei testi medievali (152 caratteri MUFI sono stati inclusi nella versione 5.2 Unicode)caratteri MUFI sono stati inclusi nella versione 5.2 Unicode)

• SIL InternationalSIL InternationalFonetica e sistemi di scrittura non inclusi in Unicode Fonetica e sistemi di scrittura non inclusi in Unicode (obsoleto perché nel frattempo molti caratteri sono stati (obsoleto perché nel frattempo molti caratteri sono stati inclusi ufficialmente in Unicode)inclusi ufficialmente in Unicode)

U+F8FF (ultimo code point della PUA BMP)U+F8FF (ultimo code point della PUA BMP)• Apple logoApple logo• Microsoft Windows logo (in Wingdings 1)Microsoft Windows logo (in Wingdings 1)

Page 9: Soluzione esercizi 2° lezione

Identità di un carattereIdentità di un carattere L’identità di un carattere è definita dalla definizione del repertorio: non è L’identità di un carattere è definita dalla definizione del repertorio: non è

un concetto assoluto ma dipende dal repertorioun concetto assoluto ma dipende dal repertorio In ASCII il carattere “–”, chiamato hyphen, è usato sia come trattino che In ASCII il carattere “–”, chiamato hyphen, è usato sia come trattino che

come simbolo “meno”: in ASCII è un carattere multipurposecome simbolo “meno”: in ASCII è un carattere multipurpose In Unicode, tale carattere è chiamato HYPHEN-MINUS, proprio ad indicare In Unicode, tale carattere è chiamato HYPHEN-MINUS, proprio ad indicare

questa sua ambivalenzaquesta sua ambivalenza Unicode definisce il simbolo matematico della sottrazione (meno) come Unicode definisce il simbolo matematico della sottrazione (meno) come

carattere separato e una gran varietà di trattini e linee (dash)carattere separato e una gran varietà di trattini e linee (dash) Unicode definisce caratteri come il MICRO SIGN e N-ARY PRODUCT distinti Unicode definisce caratteri come il MICRO SIGN e N-ARY PRODUCT distinti

dalle lettere greche corrispondenti (small mu, capital pi): tale distinzione dalle lettere greche corrispondenti (small mu, capital pi): tale distinzione logica non richiede che vengano utilizzati glifi diversi per rappresentarlilogica non richiede che vengano utilizzati glifi diversi per rappresentarli

Tuttavia non esiste un carattere diverso per il pi greco π inteso come Tuttavia non esiste un carattere diverso per il pi greco π inteso come costante numericacostante numerica

Per il simbolo dell’unità di misura della resistenza elettrica (OHM SIGN: Ω) Per il simbolo dell’unità di misura della resistenza elettrica (OHM SIGN: Ω) esiste un carattere specifico che però è definito avere equivalenza esiste un carattere specifico che però è definito avere equivalenza canonica con la lettera greca maiuscola omega: esistono due caratteri canonica con la lettera greca maiuscola omega: esistono due caratteri distinti ma sono considerati equivalenti.distinti ma sono considerati equivalenti.

Viceversa il simbolo del prefisso micro e la lettera greca minuscola μ non Viceversa il simbolo del prefisso micro e la lettera greca minuscola μ non sono considerati equivalenti (anche se c’è un mapping di compatibilità)sono considerati equivalenti (anche se c’è un mapping di compatibilità)

Se la cosa vi sembra avere poco senso, non siete i soli, il fatto da Se la cosa vi sembra avere poco senso, non siete i soli, il fatto da evidenziare è che evidenziare è che vi possono essere situazioni molto diverse per ciascun vi possono essere situazioni molto diverse per ciascun carattere, principalmente per motivi storicicarattere, principalmente per motivi storici

Page 10: Soluzione esercizi 2° lezione

Mancata visualizzazione di un carattereMancata visualizzazione di un carattere La rappresentazione di un carattere può fallire nei seguenti casi (che non La rappresentazione di un carattere può fallire nei seguenti casi (che non

si escludono a vicenda):si escludono a vicenda):• Errore nell’interpretazione dell’encodingErrore nell’interpretazione dell’encoding• Sequenza di byte illegale (p.e. errato UTF-8 o code point surrogato Sequenza di byte illegale (p.e. errato UTF-8 o code point surrogato

singolo)singolo)• Non carattereNon carattere• Unassigned code pointUnassigned code point• Carattere di uso privatoCarattere di uso privato• Glifo mancanteGlifo mancante

Soluzioni / conseguenze:Soluzioni / conseguenze:• Visualizzazione di un carattere o sequenza di caratteri errata Visualizzazione di un carattere o sequenza di caratteri errata

(Mojibake)(Mojibake)• Ignorare il carattere o la sequenza di byte (nessuna rappresentazione)Ignorare il carattere o la sequenza di byte (nessuna rappresentazione)• Utilizzare il carattere di controllo Utilizzare il carattere di controllo substitute charactersubstitute character ( ) U+001A ( ) U+001A

(non ha glifo: nessuna rappresentazione)(non ha glifo: nessuna rappresentazione)• Mostrare il glifo del carattere Mostrare il glifo del carattere replacement characterreplacement character • Utilizzare il glifo di un altro font (se il carattere è valido ed è disponibile Utilizzare il glifo di un altro font (se il carattere è valido ed è disponibile

in un font installato sul sistema)in un font installato sul sistema)• Mostrare un punto interrogativo (o una serie di punti interrogativi)Mostrare un punto interrogativo (o una serie di punti interrogativi)• Mostrare un rettangolo vuoto (o glifo specifico del font)Mostrare un rettangolo vuoto (o glifo specifico del font)• Mostrare un rettangolo con all’interno il code point value (soluzione Mostrare un rettangolo con all’interno il code point value (soluzione

molto elegante adottata da Firefox per caratteri molto elegante adottata da Firefox per caratteri validivalidi di cui manca il di cui manca il glifo in ogni font installato sul sistema)glifo in ogni font installato sul sistema)

Page 11: Soluzione esercizi 2° lezione

Composizione dinamicaComposizione dinamica++

L’idea è che si possono comporre segni diacritici L’idea è che si possono comporre segni diacritici (non spacing marks) con qualsiasi carattere(non spacing marks) con qualsiasi carattere

Per esempio: ù = u + ` (U+0075 U+0300)Per esempio: ù = u + ` (U+0075 U+0300) Ha origini “antiche”: in ASCII con le telescriventi il Ha origini “antiche”: in ASCII con le telescriventi il

carattere BS (08) era utilizzato a questo scopo carattere BS (08) era utilizzato a questo scopo usi recenti: Windows-1258 per il vietnamitausi recenti: Windows-1258 per il vietnamita

Questo rende più logico il processo di codifica dei caratteri con segni Questo rende più logico il processo di codifica dei caratteri con segni diacritici...diacritici...

...e rende possibile in teoria la combinazione di qualsiasi carattere ...e rende possibile in teoria la combinazione di qualsiasi carattere con qualsiasi segno diacritico (e anche con molteplici segni diacritici)con qualsiasi segno diacritico (e anche con molteplici segni diacritici)

La maggior parte dei caratteri con segni diacritici in uso in molti La maggior parte dei caratteri con segni diacritici in uso in molti script è presente in Unicode come carattere precompostoscript è presente in Unicode come carattere precomposto

La tecnologia per implementare queste combinazioni è complessa, La tecnologia per implementare queste combinazioni è complessa, parzialmente supportata, tuttora poco diffusa e può dare luogo a parzialmente supportata, tuttora poco diffusa e può dare luogo a risultati graficamente poco soddisfacentirisultati graficamente poco soddisfacenti

Attenzione: l’aspetto di un glifo può dipendere dalla lingua !!Attenzione: l’aspetto di un glifo può dipendere dalla lingua !! Pagina di test di supporto nei browser Pagina di test di supporto nei browser

http://www.alanwood.net/unicode/combining_diacritical_marks.htmlhttp://www.alanwood.net/unicode/combining_diacritical_marks.html

Page 12: Soluzione esercizi 2° lezione

Decomposizione canonicaDecomposizione canonica In virtù della composizione dinamica i caratteri con In virtù della composizione dinamica i caratteri con

simboli diacritici precomposti in Unicode possono simboli diacritici precomposti in Unicode possono essere “decomposti”essere “decomposti”

Un carattere precomposto deve essere considerato Un carattere precomposto deve essere considerato equivalenteequivalente alla sequenza di caratteri formata dal alla sequenza di caratteri formata dal carattere base + i segni diacritici che lo carattere base + i segni diacritici che lo accompagnanoaccompagnano

(Quasi) ogni carattere precomposto definito in (Quasi) ogni carattere precomposto definito in Unicode ha un mapping con una coppia di caratteriUnicode ha un mapping con una coppia di caratteri• Il primo carattere può essere un carattere base o, a sua Il primo carattere può essere un carattere base o, a sua

volta, un carattere precompostovolta, un carattere precomposto• Il secondo carattere è un diacriticoIl secondo carattere è un diacritico

Esempi:Esempi:• ù (U+00F9) si decompone in u + ` (U+0075 U+0300)ù (U+00F9) si decompone in u + ` (U+0075 U+0300)• ộ (U+1ED9) si decompone in ọ + c (U+1ECD U+0302) ộ (U+1ED9) si decompone in ọ + c (U+1ECD U+0302) • ọ (U+1ECD) si decompone in o + d (U+006F U+0323)ọ (U+1ECD) si decompone in o + d (U+006F U+0323)

Page 13: Soluzione esercizi 2° lezione

Composizione: problemiComposizione: problemi Una stessa stringa può essere scritta in molti modi diversiUna stessa stringa può essere scritta in molti modi diversi Per esempio il carattere ộ può essere rappresentato dalle Per esempio il carattere ộ può essere rappresentato dalle

seguenti sequenze di code point:seguenti sequenze di code point:• U+1ED9 (ộ)U+1ED9 (ộ)• U+1ECD U+0302 (ọ + c )U+1ECD U+0302 (ọ + c )• U+00F4 U+0323 (ô + d )U+00F4 U+0323 (ô + d )• U+006F U+0323 U+0302 (o + d + c )U+006F U+0323 U+0302 (o + d + c )• U+006F U+0302 U+0323 (o + c + d )U+006F U+0302 U+0323 (o + c + d )

In un’applicazione un utente potrebbe immettere una qualsiasi In un’applicazione un utente potrebbe immettere una qualsiasi di queste combinazioni a significare lo stesso caratteredi queste combinazioni a significare lo stesso carattere

Se l’applicazione deve eseguire una ricerca in un testo, il testo Se l’applicazione deve eseguire una ricerca in un testo, il testo potrebbe a sua volta contenere questo carattere secondo una potrebbe a sua volta contenere questo carattere secondo una qualsiasi di queste sequenzequalsiasi di queste sequenze

Con i linguaggi di markup (HTML) le cose possono anche Con i linguaggi di markup (HTML) le cose possono anche peggiorare con l’utilizzo di named characters entities (ô) peggiorare con l’utilizzo di named characters entities (ô) e di numbered entities (ộ)e di numbered entities (ộ)

Matching: CSS selectors, JS identifiers e stringhe, Nomi dei Matching: CSS selectors, JS identifiers e stringhe, Nomi dei font, URI path e file sul sistema operativo, sorting, regexp font, URI path e file sul sistema operativo, sorting, regexp matching, selezione...matching, selezione...

...ma non è finita qua!...ma non è finita qua!

Page 14: Soluzione esercizi 2° lezione

Caratteri di compatibilitàCaratteri di compatibilità In Unicode sono presenti molti caratteri che hanno In Unicode sono presenti molti caratteri che hanno

significati e usi particolarisignificati e usi particolari Tali usi e significati sarebbero meglio gestiti ad altri Tali usi e significati sarebbero meglio gestiti ad altri

livelli (markup, formattazione, contesto, etc.)livelli (markup, formattazione, contesto, etc.) A causa dei principi di Universalità e Convertibilità di A causa dei principi di Universalità e Convertibilità di

Unicode, dato che questi caratteri sono stati inclusi in Unicode, dato che questi caratteri sono stati inclusi in altri encoding DEVONO essere inclusi in Unicodealtri encoding DEVONO essere inclusi in Unicode

Alcuni esempi: Alcuni esempi: • µ (MICRO SIGN): simbolo del prefisso micro, ha lo stesso glifo µ (MICRO SIGN): simbolo del prefisso micro, ha lo stesso glifo

della lettera greca minuscola mu, ma definito come carattere a della lettera greca minuscola mu, ma definito come carattere a sé stante perché presente in LATIN-1sé stante perché presente in LATIN-1

• ① ① (CIRCLED DIGIT ONE): una serie di cifre numeriche racchiuse (CIRCLED DIGIT ONE): una serie di cifre numeriche racchiuse da un cerchio, presenti solo perché definite in altri encodingda un cerchio, presenti solo perché definite in altri encoding

• tutte le forme (ARABIC LETTER BEEH FINAL FORM): tutte le forme :(ARABIC LETTER BEEH FINAL FORM) ٻٻposizionali arabe, presenti solo perché definite in altri encodingposizionali arabe, presenti solo perché definite in altri encoding

• fi (LATIN SMALL LIGATURE FI): legature tipografiche, dovrebbero fi (LATIN SMALL LIGATURE FI): legature tipografiche, dovrebbero essere gestite dai font, ma sono state definite come caratteri a essere gestite dai font, ma sono state definite come caratteri a parte in altri encodingparte in altri encoding

Page 15: Soluzione esercizi 2° lezione

Decomposizione di compatibilitàDecomposizione di compatibilità I caratteri di compatibilità hanno una decomposizione di I caratteri di compatibilità hanno una decomposizione di

compatibilità: in Unicode sono mappati ad altri caratteri, insieme ad compatibilità: in Unicode sono mappati ad altri caratteri, insieme ad un un tag tag relativo al tipo di informazione necessaria a “rendere” il relativo al tipo di informazione necessaria a “rendere” il carattere originalecarattere originale

I possibili tag sono i seguenti:I possibili tag sono i seguenti:• <circle>An encircled form<circle>An encircled form• <compat>Otherwise unspecified compatibility character<compat>Otherwise unspecified compatibility character• <final>A final presentation form (Arabic)<final>A final presentation form (Arabic)• <font>A font variant (e.g., a blackletter or italics form)<font>A font variant (e.g., a blackletter or italics form)• <fraction>A vulgar fraction form, such as ½<fraction>A vulgar fraction form, such as ½• <initial>An initial presentation form (Arabic)<initial>An initial presentation form (Arabic)• <isolated>An isolated presentation form (Arabic)<isolated>An isolated presentation form (Arabic)• <medial>A medial presentation form (Arabic)<medial>A medial presentation form (Arabic)• <narrow>A narrow (hankaku) compatibility character<narrow>A narrow (hankaku) compatibility character• <noBreak>A no-break version of a space, hyphen, or other punctuation<noBreak>A no-break version of a space, hyphen, or other punctuation• <small>A small variant form<small>A small variant form• <square>A CJK squared font variant<square>A CJK squared font variant• <sub>A subscript form<sub>A subscript form• <super>A superscript form<super>A superscript form• <vertical>A vertical layout presentation form<vertical>A vertical layout presentation form• <wide>A wide (zenkaku) compatibility character<wide>A wide (zenkaku) compatibility character

Page 16: Soluzione esercizi 2° lezione

Esempi di caratteri compatibiliEsempi di caratteri compatibili µ (MICRO SIGN) U+00B5:µ (MICRO SIGN) U+00B5:

• <compat> GREEK SMALL LETTER MU <compat> GREEK SMALL LETTER MU (U+03BC)(U+03BC)

① ① (CIRCLED DIGIT ONE) U+2460:(CIRCLED DIGIT ONE) U+2460:• <circle> DIGIT ONE (U+0031)<circle> DIGIT ONE (U+0031)

:U+FB53:(ARABIC LETTER BEEH FINAL FORM) U+FB53 (ARABIC LETTER BEEH FINAL FORM) ٻٻ• <final> ARABIC LETTER BEEH (U+067B)<final> ARABIC LETTER BEEH (U+067B)

fi (LATIN SMALL LIGATURE FI) U+FB01:fi (LATIN SMALL LIGATURE FI) U+FB01:• <compat> LATIN SMALL LETTER F (U+0066) <compat> LATIN SMALL LETTER F (U+0066)

LATIN SMALL LETTER I (U+0069)LATIN SMALL LETTER I (U+0069)

Page 17: Soluzione esercizi 2° lezione

Cosa si trova nei code chartsCosa si trova nei code charts

Nota informaleNota informale

Canonical Canonical mappingmapping

SinonimoSinonimo

Cross referenceCross reference

Compatibility Compatibility mappingmapping

ATTENZIONE!! Canonical mapping e compatibility mapping non ATTENZIONE!! Canonical mapping e compatibility mapping non sono relazioni simmetriche: se A ha un mapping verso B non è sono relazioni simmetriche: se A ha un mapping verso B non è vero il viceversavero il viceversa

Page 18: Soluzione esercizi 2° lezione

Mapping canonici e di compatibilitàMapping canonici e di compatibilità

In altre parole:In altre parole: Se A ha un canonical mapping verso B, allora A e Se A ha un canonical mapping verso B, allora A e

B sono due entità che di fatto rappresentano lo B sono due entità che di fatto rappresentano lo STESSO carattere in Unicode. Come code point o STESSO carattere in Unicode. Come code point o sequenze di code point possono differire, ma sequenze di code point possono differire, ma hanno lo stesso valore semantico e dovrebbero hanno lo stesso valore semantico e dovrebbero anche avere lo stesso rendering (glifo)anche avere lo stesso rendering (glifo)

Se A ha un compatibility mapping a B, allora A e Se A ha un compatibility mapping a B, allora A e B denotano caratteri che sono fondamentalmente B denotano caratteri che sono fondamentalmente molto simili, ma che generalmente hanno molto simili, ma che generalmente hanno significati e scopi di utilizzo diversi e dovrebbero significati e scopi di utilizzo diversi e dovrebbero avere glifi diversiavere glifi diversi

Page 19: Soluzione esercizi 2° lezione

NormalizzazioniNormalizzazioni Allo scopo di ridurre la possibile variabilità di un Allo scopo di ridurre la possibile variabilità di un

testo Unicode sono state definite le seguenti testo Unicode sono state definite le seguenti normalizzazioni:normalizzazioni:

IDNAIDNACompatibility Compatibility decomposition, canonical decomposition, canonical decomposition, canonical decomposition, canonical compositioncomposition

Normalization Form KCNormalization Form KCNFKCNFKC

Compatibility Compatibility decomposition, canonical decomposition, canonical decompositiondecomposition

Normalization Form KDNormalization Form KDNFKDNFKD

W3CW3CCanonical decomposition, Canonical decomposition, canonical compositioncanonical composition

Normalization Form CNormalization Form CNFCNFC

Canonical decompositionCanonical decompositionNormalization Form DNormalization Form DNFDNFD

Page 20: Soluzione esercizi 2° lezione

Normalizzazioni: esempioNormalizzazioni: esempio

Stringa di esempio: fiancéStringa di esempio: fiancé

Decomposizione di fi e di é e Decomposizione di fi e di é e ricomposizione di éricomposizione di é

fiancéfiancéNFKCNFKC

Decomposizione di fi e di éDecomposizione di fi e di éfiance´fiance´NFKDNFKD

Decomposizione e Decomposizione e ricomposizione di éricomposizione di é

fiancéfiancéNFCNFC

Decomposizione di éDecomposizione di éfiance´fiance´NFDNFD

Page 21: Soluzione esercizi 2° lezione

Internet Media TypesInternet Media Types Una sequenza di ottetti che rappresenta un testo Una sequenza di ottetti che rappresenta un testo

può essere codificata in molti modi: può essere codificata in molti modi: l’informazione sulla codifica diventa a questo l’informazione sulla codifica diventa a questo punto fondamentale durante lo scambio dati punto fondamentale durante lo scambio dati (Internet)(Internet)

In generale una sequenza di byte può In generale una sequenza di byte può rappresentare molte cose diverse (immagini, rappresentare molte cose diverse (immagini, video, testo, etc..)video, testo, etc..)

MIME è uno standard internet (RFC 822, 2822, MIME è uno standard internet (RFC 822, 2822, 5322) originariamente concepito per estendere le 5322) originariamente concepito per estendere le email in modo tale da supportare:email in modo tale da supportare:• Testi in encoding non ASCIITesti in encoding non ASCII• Allegati non di testoAllegati non di testo• Corpi del messaggio con parti multipleCorpi del messaggio con parti multiple• Informazioni di intestazione a proposito della codifica di Informazioni di intestazione a proposito della codifica di

carattere utilizzatacarattere utilizzata Espansioni ad altri protocolli: HTTP, RTP, SIPEspansioni ad altri protocolli: HTTP, RTP, SIP

Page 22: Soluzione esercizi 2° lezione

Intestazioni MIMEIntestazioni MIME

MIME-VersionMIME-Version Content-IDContent-ID Content-Type (type/subtype)Content-Type (type/subtype) Content-Disposition (inline, attachment)Content-Disposition (inline, attachment) Content-Transfer-Encoding, in SMTP:Content-Transfer-Encoding, in SMTP:

• 7 bit (998 ottetti nel range 1..127 per linea)7 bit (998 ottetti nel range 1..127 per linea)• quoted-printable (binary-to-text encoding)quoted-printable (binary-to-text encoding)• base64 (binary-to-text encoding)base64 (binary-to-text encoding)• 8 bit (998 ottetti per linea)8 bit (998 ottetti per linea)• binarybinary

Page 23: Soluzione esercizi 2° lezione

Media Types (Content-Type)Media Types (Content-Type) applicationapplication

• atom+xmlatom+xml• jsonjson• ......• pdfpdf• x-www-form-x-www-form-

urlencodedurlencoded• ......

audioaudio• ......• mp4mp4• mpegmpeg• oggogg• ......

imageimage• gifgif• jpegjpeg• pngpng• tifftiff• ......

messagemessage• httphttp• imdn+xmlimdn+xml• partialpartial• rfc822rfc822

modelmodel• exampleexample• ......

multipartmultipart• mixedmixed• alternativealternative• relatedrelated• form-dataform-data• signedsigned• encryptedencrypted• byterangesbyteranges

texttext• cmdcmd• csscss• csvcsv• htmlhtml• javascriptjavascript• plainplain• vcardvcard• xmlxml• calendarcalendar

videovideo• mpegmpeg• mp4mp4• ......• x-flvx-flv

Il type “text” può avere il parametro Il type “text” può avere il parametro opzionale charsetopzionale charset

Page 24: Soluzione esercizi 2° lezione

MIME: esempioMIME: esempio

MIME-Version: 1.0MIME-Version: 1.0Content-Type: multipart/mixed; boundary=0016e6d9678a34060104c90e569bContent-Type: multipart/mixed; boundary=0016e6d9678a34060104c90e569b

--0016e6d9678a34060104c90e569b--0016e6d9678a34060104c90e569bContent-Type: text/plain; charset=ISO-8859-1Content-Type: text/plain; charset=ISO-8859-1Content-Transfer-Encoding: quoted-printableContent-Transfer-Encoding: quoted-printable

In realt=E0 questo =E8 solamente un testIn realt=E0 questo =E8 solamente un test--0016e6d9678a34060104c90e569b--0016e6d9678a34060104c90e569bContent-Type: image/jpeg; name="test.jpg"Content-Type: image/jpeg; name="test.jpg"Content-Disposition: attachment; Content-Disposition: attachment;

filename="test.jpg"filename="test.jpg"Content-Transfer-Encoding: base64Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAgAAAQABAAD//gAEKgD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABt/9j/4AAQSkZJRgABAgAAAQABAAD//gAEKgD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA......32bdz2o2Nlrm9uWSyghsbuMyezaubyHeTOf42aHky591/ipzf8XCp7Hsb5OK/i5xnt/MI/4an//Z32bdz2o2Nlrm9uWSyghsbuMyezaubyHeTOf42aHky591/ipzf8XCp7Hsb5OK/i5xnt/MI/4an//Z--0016e6d9678a34060104c90e569b----0016e6d9678a34060104c90e569b--

Page 25: Soluzione esercizi 2° lezione

Quoted printableQuoted printable Codifica binary-to-text: ASCII (byte di 7bit, o meglio, con il primo bit a 0) per Codifica binary-to-text: ASCII (byte di 7bit, o meglio, con il primo bit a 0) per

trasmettere (anche) byte di 8 bit (con il primo bit a 1)trasmettere (anche) byte di 8 bit (con il primo bit a 1) Utilizza il carattere = come carattere di escapeUtilizza il carattere = come carattere di escape Byte hexval > 7F: usa 3 byte < 7F: "=" seguito dalle 2 cifre esadecimali (0–9A–Byte hexval > 7F: usa 3 byte < 7F: "=" seguito dalle 2 cifre esadecimali (0–9A–

F) che rappresentano il valore numerico del byte. F) che rappresentano il valore numerico del byte. ASCII equal sign (decimal value 61) va rappresentato con "=3D". ASCII equal sign (decimal value 61) va rappresentato con "=3D". Tutti i caratteri ad eccezione dei caratteri ASCII stampabili o di fine riga (CR LF) Tutti i caratteri ad eccezione dei caratteri ASCII stampabili o di fine riga (CR LF)

devono essere codificati in questo modo.devono essere codificati in questo modo. Tutti i caratteri ASCII stampabili (valori decimali tra 33 e 126) possono essere Tutti i caratteri ASCII stampabili (valori decimali tra 33 e 126) possono essere

lasciati invariati, tranne "=".lasciati invariati, tranne "=". ASCII HT e SPACE, decimal value 9 e 32, possono rimanere invariati, tranne nel ASCII HT e SPACE, decimal value 9 e 32, possono rimanere invariati, tranne nel

caso in cui appaiano a fine riga. caso in cui appaiano a fine riga. In tal caso, devono essere escaped come "=09" (HT) o "=20" (SPACE), oppure In tal caso, devono essere escaped come "=09" (HT) o "=20" (SPACE), oppure

seguiti da a "=" (soft line break) come ultimo carattere della linea codificata; seguiti da a "=" (soft line break) come ultimo carattere della linea codificata; previene che il tab o lo spazio siano l'ultimo carattere della linea.previene che il tab o lo spazio siano l'ultimo carattere della linea.

Se il testo contiene line breaks significativi, devono essere codificati come Se il testo contiene line breaks significativi, devono essere codificati come sequenza CR LF, non con il loro valore originale, né via escape "=". sequenza CR LF, non con il loro valore originale, né via escape "=".

Viceversa se i valori decimali 13 e 10 hanno significato diverso dal fine linea, Viceversa se i valori decimali 13 e 10 hanno significato diverso dal fine linea, devono essere codificati con =0D e =0A rispettivamente.devono essere codificati con =0D e =0A rispettivamente.

Le linee di dati codificati QP devono essere inferiori a 76 caratteri.Le linee di dati codificati QP devono essere inferiori a 76 caratteri. Per soddisfare il requisito senza alterare il testo originale, possono essere Per soddisfare il requisito senza alterare il testo originale, possono essere

aggiunti soft line breaks.aggiunti soft line breaks. Un soft line break consiste di un "=" a fine linea, e non viene decodificato come Un soft line break consiste di un "=" a fine linea, e non viene decodificato come

line break nel testo decodificato line break nel testo decodificato

Page 26: Soluzione esercizi 2° lezione

Quoted Printable: esempiQuoted Printable: esempi

Se credi che verità=bellezza, allora la matematica è senz'altro Se credi che verità=bellezza, allora la matematica è senz'altro

la più bella branca della filosofiala più bella branca della filosofia

Content-Type: text/plain; charset=ISO-8859-1Content-Type: text/plain; charset=ISO-8859-1

Content-Transfer-Encoding: quoted-printableContent-Transfer-Encoding: quoted-printable

Se credi che verit=E0=3Dbellezza, allora la matematica =E8 senz'altro=20Se credi che verit=E0=3Dbellezza, allora la matematica =E8 senz'altro=20

la pi=F9 bella branca della filosofiala pi=F9 bella branca della filosofia

Se credi che verità=bellezza, allora la matematica è senz'altro la più bella Se credi che verità=bellezza, allora la matematica è senz'altro la più bella branca della filosofiabranca della filosofia

Content-Type: text/plain; charset=ISO-8859-1Content-Type: text/plain; charset=ISO-8859-1

Content-Transfer-Encoding: quoted-printableContent-Transfer-Encoding: quoted-printable

Se credi che verit=E0=3Dbellezza, allora la matematica =E8 senz'altro la =Se credi che verit=E0=3Dbellezza, allora la matematica =E8 senz'altro la =

pi=F9 bella branca della filosofiapi=F9 bella branca della filosofia

Page 27: Soluzione esercizi 2° lezione

Base64 (1/2)Base64 (1/2)

Codifica binary-to-text: ASCII (7bit) Codifica binary-to-text: ASCII (7bit) per trasmettere (anche) byte di 8 bitper trasmettere (anche) byte di 8 bit

È una trasformazione di base.È una trasformazione di base. Spezza i byte di 8 bit in sequenze di Spezza i byte di 8 bit in sequenze di

6 bit, quindi rappresenta i numeri a 6 6 bit, quindi rappresenta i numeri a 6 bit in una base a 64 simboli, per bit in una base a 64 simboli, per ciascuno dei quali si utilizza una ciascuno dei quali si utilizza una lettera rappresentabile in ASCII con 7 lettera rappresentabile in ASCII con 7 bit.bit.

Page 28: Soluzione esercizi 2° lezione

Base 64 (2/2)Base 64 (2/2)MM aa nn

7777 9797 110110

00 11 00 00 11 11 00 11 00 11 11 00 00 00 00 11 00 11 11 00 11 11 11 00

1919 2222 55 4646

TT WW FF uu

I simboli utilizzati dalla base sono A-Za-z0-9+/I simboli utilizzati dalla base sono A-Za-z0-9+/ Se il numero di byte da codificare non è divisibile per 3, si aggiungono Se il numero di byte da codificare non è divisibile per 3, si aggiungono

in fondo byte nulli, si codifica base64, quindi, nell’ultimo gruppo di 4 in fondo byte nulli, si codifica base64, quindi, nell’ultimo gruppo di 4 cifre base64:cifre base64:• Se c’era un solo byte, si prendono solo le prime due cifreSe c’era un solo byte, si prendono solo le prime due cifre• Se c’erano due byte, si prendono le prime 3 cifreSe c’erano due byte, si prendono le prime 3 cifre• Si fa il padding con il carattere “=“ per riottenere un gruppo di 4 Si fa il padding con il carattere “=“ per riottenere un gruppo di 4

cifre base64cifre base64 Le linee vengono spezzate con CR LF ogni 64 simboliLe linee vengono spezzate con CR LF ogni 64 simboli La codifica aumenta le dimensioni del dato di 4*(n/3)La codifica aumenta le dimensioni del dato di 4*(n/3) Esistono varianti di base64 (base64url: - e _ al posto di + e /)Esistono varianti di base64 (base64url: - e _ al posto di + e /)

Page 29: Soluzione esercizi 2° lezione

Altre codifiche binary-to-textAltre codifiche binary-to-text Base16, Base32Base16, Base32 Modified Base64 for...Modified Base64 for...

• Filenames, URLS, URL and filenames, UTF-7, Filenames, URLS, URL and filenames, UTF-7, XML name tokens, Regular expressions, XML name tokens, Regular expressions, program identifiers, etc..program identifiers, etc..

Uuencode (Unix per uucp)Uuencode (Unix per uucp) yEnc (Usenet)yEnc (Usenet) ASCII85 (aka Base85)ASCII85 (aka Base85) Xxencode (ASCII <> EBCDIC)Xxencode (ASCII <> EBCDIC) BinHex (mail Mac OS)BinHex (mail Mac OS) URL EncodingURL Encoding (o Percent-encoding) (o Percent-encoding) PunycodePunycode

Page 30: Soluzione esercizi 2° lezione

Encoded-WordEncoded-Word

I nomi e i valori delle intestazioni possono I nomi e i valori delle intestazioni possono contenere solo caratteri ASCII (HTTP e contenere solo caratteri ASCII (HTTP e SMTP)SMTP)

Per i valori non ASCII: MIME Encode-WordPer i valori non ASCII: MIME Encode-Word =?charset?encoding?encoded text?==?charset?encoding?encoded text?= encoding: Q o B encoding: Q o B

(Quoted printable e Base64)(Quoted printable e Base64) si possono usare multiple encoded-words si possono usare multiple encoded-words

separate da CRLF SPACEseparate da CRLF SPACE =?iso-8859-1?Q?=A1Hola,_se=F1or!?= =?iso-8859-1?Q?=A1Hola,_se=F1or!?=

Page 31: Soluzione esercizi 2° lezione

Q encodingQ encoding

A differenza del Quoted Printable A differenza del Quoted Printable originale nel Q encoding il carattere originale nel Q encoding il carattere “?” e lo spazio non possono essere “?” e lo spazio non possono essere utilizzati.utilizzati.

““?” viene rappresentato con la sua ?” viene rappresentato con la sua sequenza di escapesequenza di escape

Lo spazio viene sostituito da “_”Lo spazio viene sostituito da “_” ““_” quindi viene rappresentato con la _” quindi viene rappresentato con la

sua sequenza di escapesua sequenza di escape