Gli algoritmi per l'ordinamento del personaggio sono piuttosto lunghi e ingombranti da spiegare. Pertanto, in questo Suggerimento Linux Articolo, daremo una breve panoramica della codifica dei caratteri e ordinare la media in base a vari dati locali. Spiegheremo quindi come utilizzare le due caratteristiche di base che C fornisce per gestire le stringhe dei caratteri in base al linguaggio e alla raccolta dei vari dati locali utilizzati nel calcolo.
È molto importante chiarire che la codifica Unicode è una codifica multi-byte, quindi un personaggio può occupare più "caratteri". Sebbene, in questo articolo, vedremo le due funzioni di base per gestire i caratteri con la raccolta nei dati di tipo "char". Il "wchar.L'intestazione h "definisce i caratteri multibyte e fornisce funzioni simili per gestire i caratteri con grandi dimensioni.
Codifica dei caratteri
La codifica dei caratteri è l'assegnazione di un valore numerico binario rappresentativo a ciascun carattere alfabetico, simbolo, carattere speciale o carattere di controllo
Il codice ASCII è una delle lingua "i" c più semplice e ampiamente utilizzata. È la codifica che di solito usiamo per i caratteri di tipo "char" che mettiamo in stringhe. Questa codifica utilizza un singolo byte per carattere, 7 bit per rappresentare ogni carattere della maggior parte degli alfabeti occidentali, nonché il loro controllo e personaggi speciali. Il bit rimanente viene utilizzato per il controllo di parità durante il rilevamento degli errori. Nella versione estesa, tutti gli 8 bit vengono utilizzati per rappresentare i caratteri aggiuntivi.
Mentre l'ASCII soddisfaceva i requisiti della maggior parte degli alfabeti latini occidentali, non per gli alfabeti orientali. La codifica Unicode include tutti i personaggi degli alfabeti di tutte le lingue occidentali e orientali. Questo è il motivo per cui è attualmente uno dei più utilizzati, grazie alla sua portabilità nella codifica del testo, alla sua flessibilità e compatibilità con il codice ASCII.
Questo ampio insieme di caratteri codificati è diviso in gruppi, ognuno dei quali ha un ordine lessicografico specifico per formare l'alfabeto per ciascuna lingua o regione.
COLLAZIONE DI PERSONAGGI
La portabilità e lo scambio di informazioni spesso significa che dobbiamo elaborare i caratteri e i file scritti in un'altra regione. L'ordine lessicografico dei caratteri utilizzati nell'alfabeto che li ha creati non corrisponde a quello utilizzato dal nostro sistema.
Un esempio di questo è la differenza tra l'alfabeto latino che ha 26 lettere e l'alfabeto spagnolo che ha 27 lettere. Nell'alfabeto latino, la lettera che segue la "N" è la "O". Ma nell'alfabeto spagnolo, è seguito da "ñ". Successivamente, vediamo un tavolo con queste lettere e il loro numero decimale di rappresentazione in ASCII:
Inglese | spagnolo | ||
N | 110 | N | 110 |
O | 111 | N | 165 |
Queste differenze rendono necessario riorganizzare i caratteri secondo l'alfabeto e la zona in cui il testo deve essere interpretato.
Dati locali del sistema operativo
Ogni volta che accendiamo il nostro computer, Linux carica un set di parametri predefiniti impostati durante l'installazione o successivamente modificati dall'utente che determina le regole di lingua, codifica, tipo di caratteri utilizzati e ordinamento per la regione. Ciò determina come il testo viene reso e visualizzato dal sistema
Questi parametri sono chiamati dati locali. Possiamo visualizzarli nella console Linux usando il seguente comando:
~ $ locale
Questo comando viene visualizzato nella console. Tra le altre cose, i parametri per i dati locali, la lingua, la codifica dei caratteri e l'ordinamento del sistema per quella regione.
Come possiamo vedere nella figura, la codifica per la lingua inglese regionale degli Stati Uniti è en_us.UTF-8. Per vedere l'elenco dei diversi dati locali e codifica installati nel nostro sistema operativo, dobbiamo eseguire il seguente comando:
~ $ locale -a
La figura seguente mostra l'elenco dei dati locali installati nel sistema operativo.
Si noti che mentre la lingua è la stessa per tutte le opzioni, in questo caso è l'inglese (EN), le impostazioni di codifica e ordinamento non lo sono. Quello per gli Stati Uniti è "en_us" mentre quello per il Canada è "in_ ca".
Come selezionare i dati locali di un programma con la funzione setLocale () nella lingua C
Gli stessi parametri che vengono restituiti dal comando "~ $ Locale" nella console Linux sono definiti in "locale.H ”” in c con identico sintassi e rappresentazione e può essere modificato nell'istanza locale con la funzione setlocale.
Sintassi della funzione setLocale () nella lingua C
char* setLocale (categoria int, char* locale)Descrizione della funzione setLocale () nella lingua C
La funzione setLocale () seleziona i dati locali che il programma che stiamo compilando usi. Possiamo anche controllare la configurazione corrente. Se questi parametri non sono impostati da questa funzione nel codice, il programma è predefinito per utilizzare i dati locali del sistema su cui esegue.
Successivamente, esaminiamo l'elenco dei parametri più importanti che il setlocale () cambia o le query che influenzano il linguaggio e il processo di ordinamento:
LINGUA= Modifica o consulta la lingua locale.
LC_CTYPE= Specifica o interroga il tipo di caratteri per la locale.
LC_NUMERIC= Specifica o interroga il tipo di caratteri numerici.
Lc_time= Specifica o interroga i dati del calendario e del tempo per l'impostazione locale.
Lc_collate= Specificare o interrogare le regole di raccolta dei caratteri.
Lc_all= Specifica o interroga l'intero set di dati locali.
La funzione strxfrm () è definita nella "stringa.H ”intestazione. Per usarlo, dobbiamo includerlo nel nostro codice come segue:
#includereCome interrogare la configurazione locale di base del sistema con la funzione setlocale () in c
La funzione setlocale fornisce la possibilità di modificare i dati locali in generale o ciascuno dei suoi parametri individualmente. Fornisce inoltre la possibilità di interrogare la configurazione usata.
Per fare ciò, dobbiamo chiamare la funzione setLocale () e passare il parametro che vogliamo interrogare come primo argomento di input e una stringa vuota come secondo argomento.
La funzione setLocale () restituisce il puntatore a una stringa che contiene il nome dei dati della localizzazione corrente. Quanto segue è il codice che interroga la configurazione corrente e la visualizza nella console di comando:
#includereCome visto nella seguente immagine, Setlocale restituisce una stringa con la posizione corrente:
Come selezionare la configurazione locale e di raccolta corrente con la funzione setlocale () in c
La funzione setLocale () può essere utilizzata per selezionare o modificare i dati locali in generale con "LC _all" o tramite i singoli parametri per eseguire la raccolta di caratteri in base all'intervallo che scegliamo.
Per fare ciò, dobbiamo chiamare la funzione setlocale () e passare il parametro che vogliamo cambiare come primo argomento e una stringa con la configurazione locale che vogliamo selezionare come secondo argomento.
Ecco il codice per selezionare la raccolta di locali Canada codificata UTF-8:
#includereCome abbiamo visto finora, l'ordinamento è completamente legato al locale selezionato. Successivamente, esaminiamo le due funzioni che la lingua C fornisce per gestire le stringhe in base alla configurazione locale scelta: strxfrm () e strcoll ().
Funzione strxfrm () in lingua c
Sintassi:
int strxfrm (char* s1, char* s2, int n)Descrizione della funzione strxfrm () nella lingua C
La funzione strxfrm () copia la stringa "S2" con caratteri "N" e la memorizza per convertirla in "S1" nella raccolta del locale selezionato con setlocale (). Se l'impostazione locale non è precedentemente selezionata con setlocale (), la raccolta si basa sull'impostazione del sistema corrente.
La funzione strxfrm () restituisce un numero intero con il numero di caratteri che la nuova stringa prende poiché il numero di caratteri nella raccolta può essere più o meno di quello della stringa originale.
La funzione strxfrm () funziona in modo simile alla funzione strcpy (), tranne per il fatto che ci consente di specificare quali regole di configurazione della zona dovrebbero restituire la nuova stringa. Ciò aggiunge flessibilità all'uso di questa funzione poiché possiamo usare setlocale () e strxfrm () per convertire le stringhe con la locale che scegliamo, oltre a crearle.
La funzione strxfrm () è definita nella "stringa.H ”intestazione. Per usarlo, dobbiamo includerlo nel nostro codice come segue:
#includereCome convertire una stringa con una localizzazione e un ordine di ordinamento specifico usando la funzione strxfrm () in c
In questo esempio, creiamo la stringa "str_2" con i dati locali dagli Stati Uniti e li convertiamo nella stringa "str_1" con i dati locali configurati per la Spagna.
Per fare ciò, utilizziamo setLocale () per impostare l'ordine di ordinamento per la locale della Spagna LC _collate = "es_ es". Convertiamo "str_2" nella stringa "str_1" con strxfrm (). Puoi trovare il codice a questo scopo nella seguente illustrazione:
#includereFunzione strcoll () nella lingua C
Sintassi:
int strcoll (char* s1, char* s2)Descrizione della funzione strcoll () nella lingua C
La funzione StrColl () confronta la stringa "S2" con "S1" in base alla raccolta della localizzazione selezionata con setLocale (). Se l'impostazione locale non è precedentemente selezionata con setlocale (), la raccolta si basa sull'impostazione del sistema corrente.
La funzione strcoll () restituisce un numero intero uguale a 0 se le stringhe sono uguali. Il risultato è maggiore di 0 se S2 è maggiore di S1. Il risultato è inferiore a 0 se è inferiore a S1.
Questa funzione funziona in modo simile a strcmp () con la differenza che possiamo usarla per specificare a quali regole di configurazione della zona dovrebbero essere confrontate con le stringhe.
La funzione strcoll () è definita nella "stringa.H ”intestazione. Per usarlo, dobbiamo includerlo nel nostro codice come segue:
#includereConfronta due stringhe usando la configurazione di ordinamento specifica con la funzione strcoll () in c
In questo esempio, confrontiamo la stringa "str_2" con la stringa "str_1" utilizzando una configurazione di ordinamento specifica. In questo caso è spagnolo dall'Argentina, vale a dire "ES_ AR".
A tale scopo, creiamo due stringhe che contengono lo stesso testo, tranne per il fatto che "str_2" ha un accento sulla quinta lettera. L'accento è un simbolo rispetto a una lettera usata in spagnolo, quindi il glifo per questo personaggio è diverso. Quindi, impostiamo il locale per l'Argentina e confrontiamo le stringhe con la funzione strcoll (). Memorizziamo il risultato nel numero intero "CN" e lo offriamo alla console di comando con printf ().
Quello che segue è il codice per questo confronto:
#includereConclusione
In questo articolo di Linux, abbiamo spiegato brevemente cosa significhi codifica dei personaggi nell'informatica in modo da avere un'idea più chiara di ciò che la codifica del personaggio significa a seconda delle configurazioni locali utilizzate dai sistemi informatici. Quindi, ti abbiamo mostrato come utilizzare le due caratteristiche di base che la lingua C fornisce per gestire le stringhe di raccolta dei personaggi. Speriamo che questo articolo ti sia utile. Per ulteriori articoli sulla lingua C e sui suggerimenti Linux, utilizzare il motore di ricerca del sito.