Tabelle codici

La maggior parte delle applicazioni scritte oggi gestisce i dati dei caratteri principalmente come Unicode, usando la codifica UTF-16. Tuttavia, molte applicazioni legacy continuano a usare set di caratteri in base alle pagine codici. Anche le nuove applicazioni a volte devono funzionare con le pagine codici, spesso per uno dei motivi seguenti:

  • Per comunicare con applicazioni legacy.
  • Per comunicare con i server di posta e notizie meno recenti, che potrebbero non supportare sempre Unicode.
  • Per comunicare con la console di Windows per scopi legacy. La console supporta Unicode, ma alcuni strumenti dell'applicazione della riga di comando legacy potrebbero non essere disponibili.

Nota

Le nuove applicazioni Windows devono usare Unicode per evitare le incoerenze di diverse pagine di codice e per facilitare la localizzazione.

 

Ogni tabella codici è rappresentata da un identificatore della tabella codici, ad esempio 1252 e viene gestito dalle funzioni API Unicode e set di caratteri. Per un elenco di identificatori della tabella codici supportati, vedere Identificatori di tabella codici. Il riferimento "Code Pages" nel Microsoft Go Global Developer Center fornisce descrizioni complete di molte pagine di codice.

Le pagine codici di Windows, comunemente denominate "pagine codici ANSI", sono le pagine codici per cui i valori non ASCII (valori superiori a 127) rappresentano caratteri internazionali. Queste pagine di codice vengono usate in modo nativo in Windows Me e sono disponibili anche in Windows NT e versioni successive.

Nota

Originariamente, la tabella codici di Windows 1252, la tabella codici comunemente usata per l'inglese e altre lingue europee occidentali, è stata basata su una bozza di ANSI (American National Standards Institute). Tale bozza divenne infine ISO 8859-1, ma la tabella codici di Windows 1252 è stata implementata prima che lo standard sia diventato finale e non sia esattamente uguale a ISO 8859-1.

 

Molte funzioni API di Windows hanno versioni "A" (ANSI) e "W" (wide, Unicode). La versione "A" gestisce il testo in base alle pagine codici di Windows, mentre la versione "W" gestisce il testo Unicode. Vedere Tipi di dati di Windows per stringhe e convenzioni per i prototipi di funzioni.

Le pagine codici di Windows vengono talvolta definite anche "pagine codici attive" o "pagine codici attive di sistema". Un sistema operativo Windows ha sempre una tabella codici windows attiva. Tutte le versioni ANSI delle funzioni API usano la tabella codici attualmente attiva.

Le pagine codici oem (Original Equipment Manufacturer) sono le code pages per cui i valori non ASCII rappresentano i caratteri di disegno e punteggiatura della riga. Queste pagine di codice sono state originariamente usate per MS-DOS e sono ancora usate per le applicazioni console. Vengono usati anche per i nomi di file non estesi nei file system FAT12, FAT16 e FAT32, come descritto in Set di caratteri usati nei nomi dei file. La consueta tabella codici OEM per l'inglese è la tabella codici 437.

Per le pagine codici di Windows e le pagine codici OEM, i valori di codice 0x00 tramite 0x7F corrispondono al set di caratteri ASCII a 7 bit. I valori di codice 0x00 tramite 0x19 e 0x7F rappresentano sempre caratteri di controllo standardizzati e 0x20 tramite 0x7E rappresentano caratteri visualizzabili standardizzati. I caratteri rappresentati dai codici rimanenti, 0x80 tramite 0xff, variano tra i set di caratteri. Ogni set di caratteri include caratteri speciali diversi, in genere personalizzati per una lingua o un gruppo di lingue. La tabella codici di Windows 1252 e la tabella codici OEM 437 vengono generalmente usate nella Stati Uniti.

Oltre alle pagine codici Windows e OEM, le applicazioni possono usare pagine di codice non native. Gli esempi sono le pagine codici EBCDIC e Macintosh.

Due codifiche di Unicode (UTF-7 e UTF-8) vengono implementate come pagine codici. Come altre pagine codici, ogni pagina è nota da un identificatore numerico e può essere gestita con molte delle stesse funzioni API unicode e set di caratteri.

Le pagine codici possono essere pagine di tipo SET di caratteri a byte singolo (SBCS) o pagine del set di caratteri a byte doppio (DBCS). Nelle pagine SBCS ogni byte codifica direttamente un singolo carattere, in modo che sia possibile rappresentare esattamente 256 caratteri distinti (inclusi caratteri di controllo, lettere, cifre, punteggiatura, simboli e simili). Le pagine codici DBCS vengono usate per lingue come giapponese e cinese. In una tabella codici di questo tipo, alcuni caratteri hanno codifica a due byte con determinati valori di byte (valori sempre maggiori di 127) che fungono da "byte lead". Anziché codificare i caratteri in base al proprio diritto, i byte di lead possono essere mappati a un carattere solo in combinazione con un "byte finale".

Alcuni protocolli legacy richiedono l'uso delle pagine codici SBCS e DBCS. Ogni tabella codici SBCS/DBCS supporta caratteri diversi, ma nessuna tabella codici supporta l'intera ampiezza dei caratteri forniti da Unicode. Ogni tabella codici SBCS/DBCS supporta un subset diverso, codificato in modo diverso.

Nota

I dati convertiti da una tabella codici SBCS o DBCS a un'altra sono soggetti a danneggiamento, perché lo stesso valore di dati in pagine codici diverse può codificare un carattere diverso. I dati convertiti da Unicode a SBCS o DBCS sono soggetti a perdita di dati, perché una determinata tabella codici potrebbe non essere in grado di rappresentare ogni carattere usato in tali dati Unicode specifici.

 

Oltre alle pagine codici SBCS e DBCS, le applicazioni hanno disponibile le pagine codici del set di caratteri multibyte 52936, 54936, 51949 e 5022x, che usano un approccio simile a quello per un DBCS. Una tabella codici del set di caratteri multibyte supera tuttavia le codifiche a due byte di alcuni caratteri. UTF-7 e UTF-8 usano un approccio simile per codificare Unicode in base rispettivamente a byte a 7 bit e a 8 bit. Per altre informazioni, vedere Unicode.

Diverse funzioni del set di caratteri Unicode e carattere consentono alle applicazioni di gestire le pagine codici. Un'applicazione può usare le funzioni GetCPInfo e GetCPInfoEx per ottenere informazioni su una tabella codici. Queste informazioni includono il carattere predefinito usato quando un carattere in una stringa convertita non ha una voce corrispondente nella tabella codici.

Un'applicazione può usare le funzioni MultiByteToWideChar e WideCharToMultiByte per convertire tra stringhe basate su pagine codici Windows e stringhe Unicode. Anche se i nomi fanno riferimento a "MultiByte", queste funzioni funzionano altrettanto bene con SBCS, DBCS e pagine codici del set di caratteri multibyte.

Nota

WideCharToMultiByte può perdere alcuni dati se la tabella codici specificata non può rappresentare tutti i caratteri in una stringa Unicode.

 

L'applicazione può convertire tra le pagine codici di Windows e le pagine codici OEM usando le funzioni della libreria di runtime C standard. Tuttavia, l'uso di queste funzioni presenta un rischio di perdita di dati perché i caratteri che possono essere rappresentati da ogni tabella codici non corrispondono esattamente.

Le applicazioni possono anche chiamare la funzione GetACP . Questa funzione recupera l'identificatore della tabella codici di Windows (ANSI) corrente.

Character Sets