2. Perch辿 questo talk?
Scambio di file CSV problematico
Francesco;Via Torino;347-101212;1977-01-01
Filippo;Piazza Duomo;328-923212;1980-02-04
Luisa;Piazza Cordusio;02-123456;1979-03-12
Name,Address,Birthdate
Francesco,Via Torino,1977-01-01
Filippo,Piazza Duomo,1980-02-04
Luisa,Piazza Cordusio,1979-03-12
Name,Address,Birthdate
Ars竪ne,50 rue de Varenne,1977-01-01
Ad辿la誰de,134 rue du Fbg. St-Honor辿,1980-02-04
B辿n辿dicte,rue de la Paix,1979-03-12
Name,Address,Birthdate
Ars?ne,50 rue de Varenne,1977-01-01
Ad?la?de,134 rue du Fbg. St-Honor?,1980-02-04
B?n?dicte,rue de la Paix,1979-03-12
Name,Address,Birthdate
亳仆舒,仍. 仂仆从舒,1977-01-01
仆亟亠亶,仂仗亠从 于亠仆舒亟从仂亞仂,1980-02-04
亳从仂亳,亠于从亳亶 仗仂仗亠从,1979-03-12
Name,Address,Birthdate
?????,??. ???????,1977-01-01
??????,???????? ???????????,1980-02-04
????????,??????? ????????,1979-03-12
3. Il problema della codifica
Stabilire una corrispondenza tra simboli e codici numerici (bytes)
A=... B= C=... D=... E=...
Quali sono i caratteri da rappresentare?
IEC646
1972
ASCII
1968
PETSCII
1977
EBCDIC
~1960
0 1 1 0 1 0 0 1
4. Standard: ASCII 7-bit (US-ASCII)
7 bit di codifica (+ 1 bit di parit): 128 combinazioni
a..z A..Z 0..9 !"#$%&'()*+,-./:;<=>?@[]^_{|}~
32 caratteri di controllo cosiddetti non-stampabili (CR, LF, backspace, )
Vantaggi
Ordinamento alfabetico + numerico intrinseco
1 carattere 1 byte (per definizione)
0 x x x x x x x
Problema
Adatto solo alla lingua inglese
Impossibile codificare accenti, dittonghi, dieresi e alfabeti non latini
Es. in italiano si usava lapostrofo come workaround (e - perche - pero)
5. Soluzioni locali: Extended ASCII (8-bit)
Usare il vecchio bit di parit per raddoppiare
le combinazioni (che diventano 256)
Per diverse famiglie linguistiche esistono diverse varianti di Extended ASCII
Le prime 127 combinazioni sono le stesse di US-ASCII, le altre dipendono da
quale variante di Extended ASCII viene utilizzata
Esempi: CODEPAGEs in MS-DOS
x x x x x x x x
9. Soluzioni locali: Extended ASCII (8-bit)
Superset di
ISO-8859-1
(o latin1)
Non - printable
US ASCII (7-bit)
Extended
10. Globalizzazione e Unicode
Necessit di scambiare informazioni fra parti diverse del mondo
Necessit di usare pi湛 alfabeti nello stesso documento
Name,Address,Birthdate
亳仆舒,仍. 仂仆从舒,1977-01-01
仆亟亠亶,仂仗亠从 于亠仆舒亟从仂亞仂,1980-02-04
Ars竪ne,50 rue de Varenne,1977-01-01
Ad辿la誰de,134 rue du Fbg. St-Honor辿,1980-02-04
B辿n辿dicte,rue de la Paix,1979-03-12
亳从仂亳,亠于从亳亶 仗仂仗亠从,1979-03-12
11. Globalizzazione e Unicode
Idea iniziale: usare 2 byte per carattere = 65536 combinazioni possibili
5 anni dopo la versione 1.0 si giungono ad assegnare 178500 combinazioni
La versione 8.0 (2015) assegna 260319 combinazioni
2 byte non sono pi湛 sufficienti: Unicode 竪 una specifica da codificare a sua
volta
Curiosit: sono assegnati anche simboli di alfabeti appartenenti a lingue
artificiali, come i Tengwar della lingua elfica creata da J.R.R Tolkien e
parlata in Lord of Rings. Qualcuno ha proposto di inserire lalfabeto Klingon
ma la proposta 竪 stata rifiutata perch辿 con lalfabeto latino si riesce benissimo
a scrivere in Klingon.
12. Implementazioni di Unicode
Lunghezza fissa: UTF-32 (32 bit)
Vantaggio: ogni carattere occupa sempre lo stesso numero di byte.
Semplifica limplementazione dei text-editor e la divisione in pagine
Svantaggio: incompatibile con i documenti ASCII pre-esistenti
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
13. Implementazioni di Unicode
Lunghezza variabile: UTF-8
1 1 0 x x x x x
1 1 1 0 x x x x
1 1 1 1 0 x x x
0 x x x x x x x => corrispondenza 1-a-1 con US-ASCII 7-bit
1 0 x x x x x x 1 0 x x x x x x 1 0 x x x x x x
1 0 x x x x x x 1 0 x x x x x x
1 0 x x x x x x
22. $ ls -l
total 16
-rw-r--r-- 1 francesco.francesco 433694780 147 Sep 14 11:34 example-1.csv
-rw-r--r-- 1 francesco.francesco 433694780 141 Sep 14 11:34 example-2.csv
$ file example-1.csv
example-1.csv: UTF-8 Unicode text
$ file example-2.csv
example-2.csv: ISO-8859 text
$ cat example-2.csv | iconv -f iso-8859-1 -t utf-8 > converted.csv
$ file converted.csv
converted.csv: UTF-8 Unicode text
Individuare la codifica e convertire (UNIX)
23. Una questione di ordine
Collation
Language Swedish: z < 旦
German: 旦 < z
Usage German Dictionary: of < 旦f
German Phonebook: 旦f < of
Customizations Upper-First A < a
Lower-First a < A
Riferimento: http://unicode.org/reports/tr10/
Alfabeto svedese: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Alfabeto tedesco: ABCDEFGHIJKLMNOPQRSTUVWXYZ (=A =O =U =ss)
24. Una questione di ordine
public void localeTest() {
final java.text.Collator collator1 = java.text.Collator.getInstance(java.util.Locale.forLanguageTag("TR"));
final java.text.Collator collator2 = java.text.Collator.getInstance(java.util.Locale.forLanguageTag("FR"));
collator1.setStrength(java.text.Collator.PRIMARY);
collator2.setStrength(java.text.Collator.PRIMARY);
System.out.println("----------------------------------------------------------------");
System.out.println(collator1.compare("o", "旦")); // -1 (TR)
System.out.println(collator2.compare("o", "旦")); // 0 (FR)
System.out.println(collator1.compare("脹", "i")); // -1 (TR)
System.out.println(collator2.compare("脹", "i")); // 1 (FR)
System.out.println(collator1.compare("I", "聴")); // -1 (TR)
System.out.println(collator2.compare("I", "聴")); // 0 (FR)
System.out.println("----------------------------------------------------------------");
}