Un file è l’unità di dati elementare gestita dal file system ed è caratterizzato da:
- un contenuto, cioè una sequenza di byte
- un identificatore, unico per ogni file
I dati contenuti nel file devono essere opportunamente interpretati.
Le regole con cui interpretare il file sono chiamate formato del file.
Formato dei file = codifica convenzionale di informazioni adottata da un'applicazione.
-
può contenere qualsiasi tipo di dati, codificato in codice binario a scopo di archiviazione o utilizzo.
-
solitamente sono concepiti come sequenze di byte: le singole cifre bit che costituiscono il file sono raggruppate in gruppi di otto.
-
alcuni contengono header, cioè contenitori di metadati usati dai programmi associati ai file per riconoscerne ed interpretarne il contenuto.
Esempio: un file GIF può contenere più immagini, e gli header sono utilizzati per identificare e descrivere ciascun blocco di dati.
- contiene solo caratteri alfabetici, che compongono un testo leggibile direttamente dagli utenti
- non hanno bisogno di installare programmi appositi
- sono molto utilizzati per
- file indirizzati all'utente
- documenti
- codice sorgente
- garantiscono una buona portabilità tra SO
-
contiene un programma eseguibile per un computer, cioè un programma scritto in linguaggio macchina nel formato adatto ad essere caricato dal sistema operativo
-
gli eseguibili sono dipendenti dalla piattaforma
Esempio: un file eseguibile per un sistema Microsoft Windows non è direttamente utilizzabile in sistemi Unix o Mac OS (a meno di non usare un software di emulazione).
Questa restrizione è dovuta a tre motivi:
- processori diversi supportano linguaggi macchina diversi
- sistemi operativi diversi usano formati diversi per i file eseguibili
- per effettuare operazioni di base (input/output) i programmi eseguibili devono avvalersi delle primitive fornite dal sistema operativo
Cosa rende un file portabile?
- Il livello di supporto nei sistemi operativi
Esempi: I file di testo sono supportati da tuti i sistemi operativi e concorrono al funzionamento del sistema stesso -
Il livello di diffusione di uno standard
Esempi: PDF e DOC sono ad esempio molto diffusi -
Il livello di variabilità nelle versioni di uno standard
Esempi:- Vecchie versioni di DOC non sono più supportate oggi
- Vecchie versioni di PDF sono ancora compatibili con gli interpreti attuali
Parlare di formato di file significa parlare dello schema di codifica necessario per interpretarlo.
La codifica è quel processo che ci permette di esprimere informazioni e messaggi mediante le regole e i simboli di un sistema convenzionale (il codice) stabilito concordemente dall’emettitore e dal ricevitore dei messaggi allo scopo di trasmettere o elaborare automaticamente le informazioni - Treccani
I formati di testo sono quelli più portabili e sono stati storicamente utilizzati per facilitare l’interoperabilità dei sistemi
- ASCII nel modello ISO/OSI
- HTML nel WWW
- JSON nel Web 2.0
Nei calcolatori il testo è memorizzato come sequenza binaria, la codifica del testo si occupa di definire la corrispondenza tra una sequenza binaria e il corrispondente carattere alfanumerico
Esempio:
- Per la codifica Windows-1252, il carattere “é” è salvato in memoria usando la sequela binaria che in esadecimale corrisponde al valore “E9”
- Per la codifica DOS latin-1, il valore “E9” corrisponde al carattere “Ú”
La difficoltà è quindi duplice:
- È necessario scegliere con cura, a seconda dell'applicazione di destinazione, la codifica da utilizzare quando si salva un testo
- Quando è il momento di visualizzare un testo, è necessario poter determinare la codifica utilizzata
Quantità di informazione da rappresentare (considerando l’alfabeto inglese):
26 lettere +
26 lettere maiuscole +
10 cifre decimali +
30 caratteri circa di uso comune (., *, %, etc.) +
alcuni caratteri di controllo (spazi, interruzione di riga)
= 120 caratteri circa
Numero di BIT necessari : bastano 7 bit poiché 27 = 128 > 120
Su questa base è stato creato il codice ASCII, basato appunto sull’uso di 7 bit per ogni carattere.
Esempi:
Carattere | Codice |
---|---|
A | 1000001 |
B | 1000010 |
b | 1100000 |
La globalizzazione di Internet ha proposto il problema di rendere correttamente gli alfabeti di migliaia di lingue nel mondo.
Poiché i 7 bit usati da ASCII consentono di rappresentare solo 128 caratteri diversi, sono stati definiti nel tempo altri codici per consentire la rappresentazione di più caratteri
ASCII esteso: usa 8 bit (un BYTE) per carattere. Consente quindi di rappresentare anche caratteri accentati e lingue diverse dall’inglese.
Extended Binary Characters for Digital Interchange Code, codifica proprietaria IBM del 1965 a 8 bit. IBM è molto sicura della superiorità dei suoi chip e si azzarda fin dagli anni cinquanta ad usare tutti e 8 i bit del byte
Una codifica ISO del 1991 che permettere l'uso di caratteri nazionali europei in un contesto sostanzialmente ASCII. Sono lasciati 12 codici liberi per le versioni nazionali dei vari linguaggi europei. Ogni versione nazionale li sostituisce con caratteri propri. I caratteri sacrificati sono: # $ @ \ ¬ ` { | } ~
Più comunemente ISO Latin 1 è un'estensione standard dell’ASCII che comprende un certo numero di caratteri degli alfabeti europei. È compatibile all’indietro con ASCII: estende i soli caratteri >127
Lo standard Unicode definisce tre codifiche che consentono a uno stesso dato di essere trasferito utilizzando un vocabolario basato su 1, 2 o 4 byte: UTF-8, UTF-16, UTF-32. Queste tre codifiche descrivono gli stessi caratteri e possono essere trasformate efficientemente una nell'altra.
-
Composizione dinamica. Alcuni caratteri (in arabo, in cinese, ma anche, banalmente, le lettere accentate o con modificatori degli alfabeti europei) sono composizioni di codifiche indipendenti. In certi casi ricorrere ad un doppio codice per un carattere composto è eccessivo. Per i simboli di uso frequente esiste un singolo carattere equivalente
-
Semantica. Ogni carattere possiede un suo significato preciso (la ß tedesca è diversa dalla ß greca) nonché proprietà come direzione, esigenze di spaziatura, capacità di combinazione
-
Convertibilità. Esiste un meccanismo di conversione tra Unicode e altre codifiche precedenti, in modo da garantire compatibilità all’indietro
Caratteri codificati da 1 byte (8 bit) per i più frequenti, poi 2, 3 e 4 per i meno frequenti. Usato molto nel WEB. Ha il vantaggio che il set di caratteri ASCII mantiene la stessa codifica, può quindi essere usato su vecchie applicazioni. Ma non si accede direttamente a una codifica prima si deve codificare come raggruppare i byte
Caratteri codificati da 2 byte (16 bit) e 4 byte per i meno frequenti. Usato per situazioni dove si vuole bilanciare l'uso di memoria con la velocità di accesso ai dati
Caratteri codificati da 4 byte (32 bit). Usato quando non si ritiene di avere problemi di memoria oppure se si fa uso di vocabolari poco frequenti
Se UNICODE è uno standard universale, in grado di rappresentare i caratteri di tutti gli alfabeti, perché ci sono ancora problemi di codifica?
- Il motivo principale è che i vecchi sistemi non si sono necessariamente evoluti contemporaneamente alla rivoluzione Unicode
- Microsoft si è presa la libertà di creare le proprie tabelle di caratteri derivate dalle tabelle ISO-8859-x.
Quindi, l'invio di un file di testo Windows a un server Linux o a un'applicazione proprietaria può facilmente generare disalineamenti - Data l’ampia numerosità di caratteri presenti in UNICODE, i font dei caratteri non sempre sono prodotti per l’intero set; quindi, alcuni font possono essere applicati solo a specifici sottoinsiemi di UNICODE
- Byte Order Mark (BOM) è una sequenza di byte UNICODE non stampabili posta all'inizio di un testo UNICODE per facilitarne l'interpretazione.
BOM non è né standard né obbligatorio, ma rende più facile per le applicazioni compatibili determinare il sottotipo del formato Unicode e definire la direzione di lettura dei byte.
Questo spesso causa problemi di compatibilità perché non tutte le applicazioni sanno come gestire BOM. Per le applicazioni non compatibili, questa sequenza di byte viene decodificata in ASCII esteso
Indipendentemente dall'origine di un file, può essere utile verificare con assoluta certezza il suo formato e mostrare l'eventuale tag BOM.
Se all'inizio del file è presente un tag BOM, si tratta di un testo in formato Unicode:
- UTF-8 = EF BB BF
- UTF-16 Big Endian = FE FF
- UTF-16 Little Endian = FF FE
- UTF-32 Big Endian = 00 00 FE FF
- UTF-32 Little Endian = FF FE 00 00
Premere qui per accedere al validatore di W3C
- L’assenza del BOM non consente di stabilire che il file non sia codificato in UNICODE
- Rimuoverlo può aumentare la compatibilità con le applicazioni