Condividi tramite


Uso dei contrassegni di ordine dei byte

I file di testo Unicode possono essere codificati in diversi formati, tra cui UTF-8, UTF-16 e UTF-32. Ognuno di questi formati può essere preceduto da un indicatore di ordine byte (BOM) che indica l'ordinamento dei byte utilizzato quando il testo è stato scritto. Nella tabella seguente sono elencati i contrassegni di ordine dei byte disponibili. Per UTF-8, il contrassegno dell'ordine dei byte è facoltativo, poiché i byte possono essere in un solo ordine. Per UTF-16 e UTF-32, il contrassegno dell'ordine dei byte è obbligatorio perché tali formati sono sensibili all'ordinamento dei byte.

Nota

Un byte order mark non è un carattere di controllo che seleziona l'ordine dei byte del testo.

 

Byte order mark Descrizione
EF BB BF UTF-8
FF FE UTF-16, little endian
FE FF UTF-16, big endian
FF FE 00 00 UTF-32, little endian
00 00 FE FF UTF-32, big-endian

 

Nota

I prodotti Microsoft legacy usano Windows-1252 o UCS-2 (fixed-with UTF-16), ordine dei byte little endian per "Unicode". Per le nuove applicazioni, è consigliabile usare UTF-8.

 

Idealmente, tutto il testo Unicode segue un solo set di regole di ordinamento dei byte. Ciò non è possibile, tuttavia, perché i microprocessori differiscono nella posizione del byte meno significativo. I processori Intel e MIPS posizionano prima il byte meno significativo, mentre i processori Motorola (e tutti i file Unicode invertiti in byte) lo posizionano per ultimo. Con un solo set di regole di ordinamento dei byte, gli utenti di un tipo di microprocessore sono costretti a scambiare l'ordine dei byte ogni volta che un file di testo normale viene letto o scritto in, anche se il file non viene mai trasferito a un altro sistema operativo basato su un microprocessore diverso.

La posizione preferita per specificare l'ordine dei byte è in un'intestazione di file, ma i file di testo non hanno intestazioni. Di conseguenza, Unicode ha definito un carattere (U+FEFF) e un non carattere (U+FFFE) come contrassegni di ordine dei byte. Sono immagini di byte speculari l'una dall'altra.

Poiché la sequenza U+FEFF è estremamente rara all'inizio di un normale file di testo non Unicode, può fungere da marcatore implicito o firma per identificare il file come file Unicode. Le applicazioni che leggono file di testo Unicode e non Unicode devono usare la presenza di questa sequenza come indicatore che il file è molto probabilmente un file Unicode. Confrontare questa tecnica con l'uso del marcatore MS-DOS EOF per terminare i file di testo.

Quando un'applicazione trova U+FEFF all'inizio di un file di testo, in genere elabora il file come file Unicode, anche se può eseguire ulteriori controlli euristici per la verifica. Un controllo di questo tipo può essere semplice come il test per scoprire se la variazione nei byte di ordine basso è molto superiore rispetto alla variazione nei byte di ordine elevato. Ad esempio, se il testo ASCII viene convertito in testo Unicode, ogni secondo byte è 0. Inoltre, il controllo dei caratteri di avanzamento riga e ritorno a capo (U+000A e U+000D) e per dimensioni pari o dispari del file può fornire un indicatore forte della natura del file.

Quando un'applicazione trova U+FFFE all'inizio di un file di testo, lo interpreta per indicare che il file è un file Unicode invertito in byte. L'applicazione può scambiare l'ordine dei byte o avvisare l'utente che si è verificato un errore.

Poiché il carattere di byte order mark Unicode non viene trovato in alcuna tabella codici, scompare se i dati vengono convertiti in ANSI. A differenza di altri caratteri Unicode, non viene sostituito da un carattere predefinito quando viene convertito. Se un indicatore di ordine dei byte viene trovato al centro di un file, non viene interpretato come carattere Unicode e non ha alcun effetto sull'output di testo.

Nota

Il valore Unicode U+FFFF È illegale nei file di testo normale e non può essere passato tra le applicazioni. È riservato per l'uso privato di un'applicazione.

 

Uso di caratteri speciali in Unicode