Impostazioni locali e tabelle codici
Un ID delle impostazioni locali indica la lingua e le convenzioni locali relative a una determinata zona geografica. Una lingua può essere parlata in più di un paese, ad esempio il portoghese, che è parlato sia in Brasile che in Portogallo. Al contrario, è possibile che in un paese siano parlate più lingue ufficiali. In Canada, ad esempio, ne esistono due: l'inglese e il francese. Pertanto per il Canada sono disponibili due diverse impostazioni locali: Inglese (Canada) e Francese (Canada). Alcune categorie dipendenti dalle impostazioni locali includono la formattazione delle date e il formato di visualizzazione dei valori monetari.
La lingua determina le convenzioni di formattazione del testo e dei dati, mentre il paese determina le convenzioni nazionali. Ciascuna lingua possiede una mappatura univoca, rappresentata dalle tabelle codici, che include anche caratteri diversi da quelli dell'alfabeto quali i numeri e la punteggiatura. La tabella codici corrisponde a un set di caratteri ed è associata alla lingua. Le impostazioni locali sono pertanto una combinazione univoca di dati relativi alla lingua, al paese e alla tabella codici. Le impostazioni locali e della tabella codici possono essere modificate in fase di esecuzione richiamando la funzione setlocale.
A lingue diverse possono corrispondere tabelle codici differenti. La tabella codici ANSI 1252, ad esempio, viene utilizzata per l'inglese e per la maggior parte delle lingue europee, mentre la tabella codici ANSI 932 viene utilizzata per il Kanji giapponese. Di fatto, tutte le tabelle codici condividono il set di caratteri ASCII per i primi 128 caratteri (da 0x00 a 0x7F).
Ogni tabella di codici a byte singolo può essere rappresentata con una tabella con 256 voci nella quale determinati valori di byte corrispondono a determinati caratteri, compresi i numeri e i segni di punteggiatura, o caratteri grafici. Ogni tabella codici multibyte può essere inoltre rappresentata come una tabella di dimensioni molto grandi, con 64.000 voci, formata da valori a byte doppio per i caratteri. Tuttavia, in pratica, i primi 256 caratteri (a byte singolo) vengono generalmente rappresentati sotto forma di tabella, mentre i rimanenti caratteri (a byte doppio) come intervalli di valori.
Per ulteriori informazioni sulle tabelle codici, vedere Tabelle codici.
La libreria di runtime del linguaggio C possiede due tipi di tabelle codici interne: quella delle impostazioni locali e quella multibyte. È possibile modificare la tabella codici corrente durante l'esecuzione del programma; vedere la documentazione per le funzioni setlocale e _setmbcp. Inoltre, la libreria di runtime può ottenere e utilizzare il valore della tabella codici del sistema operativo. In Windows 2000 la tabella codici del sistema operativo è la tabella codici ANSI predefinita di sistema. Questa tabella codici rimane invariata durante l'esecuzione del programma.
Quando la tabella codici delle impostazioni locali viene cambiata, il funzionamento dell'insieme di funzioni basate sulle impostazioni locali corrisponde a quello impostato dalla tabella codici selezionata. In base all'impostazione predefinita, tutte le funzioni che dipendono dalle impostazioni locali avviano l'esecuzione con una tabella codici delle impostazioni locali specifica delle impostazioni locali "C". È possibile modificare la tabella codici interna nonché altre proprietà specifiche delle impostazioni locali richiamando la funzione setlocale. Una chiamata a setlocale(LC_ALL, "") consente di configurare le impostazioni locali su quelle indicate dalla tabella codici dell'utente del sistema operativo.
In modo analogo, quando la tabella codici multibyte viene modificata, il funzionamento delle funzioni multibyte corrisponde a quello richiesto dalla tabella codici selezionata. In base all'impostazione predefinita, tutte le funzioni multibyte avviano l'esecuzione con una tabella codici multibyte corrispondente alla tabella codici predefinita del sistema operativo. È possibile modificare la tabella codici multibyte interna chiamando la funzione _setmbcp.
La funzione di runtime del linguaggio C setlocale imposta, modifica o ricerca alcune o tutte le informazioni sulle impostazioni locali del programma corrente. La routine _wsetlocale è una versione a caratteri estesi di setlocale. Gli argomenti e i valori restituiti di _wsetlocale sono stringhe con caratteri estesi.