Rappresentazione dei caratteri
Il problema della codifica dei caratteri è complesso, sebbene appaia banale; lingue diverse hanno esigenze diverse, in alcune lingue il concetto di "carattere" non esiste neanche.
Concettualmente si associa sempre una codifica numerica ad ogni carattere. Una stringa è una sequenza di numeri che rappresentano in successione i caratteri.
La parte di maggiore complessità è il modo con cui l'associazione viene fatta. Le rappresentazioni più comuni sono ASCII e UNICODE.
ASCII prevede un byte per carattere, definisce il significato dei primi 128 simboli comuni a tutte le lingue, ed è estendibile, assegnando così un significato anche agli altri 128 simboli. Lingue diverse usano estensioni diverse.
UNICODE è un sistema di rappresentazione che assegna un numero univoco ad ogni carattere indipendentemente dalla lingua. Gli alfabeti mappati in unicode sono tutti quelli moderni e parte di quelli antichi.
Ogni simbolo occupa uno spazio variabile, al massimo 21 bit, dei quali i primi cinque definiscono il piano, i restanti il carattere vero e proprio.
Il piano 0 (Basic Multilingual Plane) copre le lingue più usate.
I codici numerici sono serializzati tramite diversi schemi di ricodifica, i quali assegnano codici più brevi ai simboli più frequenti, in modo da minimizzare le dimensioni del testo.
C++ può gestire sia tipi codificati ASCII che tipi UNICODE.
Il tipo char, esattamente come nel C, rappresenta ogni carattere su 8 bit, generalmente in codifica ASCII.
WCHAR contiene un carattere Unicode 16-bit.
E' disponibile anche una definizione condizionale all'interno dell'header standard tchar.h. Il carattere generico è identificato dal tipo _TCHAR ed il suo tipo reale dipende dalla definizione del simbolo _UNICODE.
Compatibilmente con questo sistema sono ridefinite tutte le funzioni della standard library del C con sintassi analoga ma con la triplice tipologia di trattazione di caratteri.
Per quanto riguarda ASCII restano valide le vecchie funzioni (printf, scanf).
Le funzioni UNICODE sono identificate dal prefisso w (wprintf, wscanf).
Esistono anche le varianti generiche dipendenti dal simbolo _UNICODE contrassegnate dal prefisso _t (_tprintf, _tscanf).
Definizione delle stringhe in C++
Restano sempre valide le dichiarazioni C-style degli array di caratteri.
char stringa_ascii[20]; wchar stringa_utf16[20];Oltre questo sono stati introdotti direttamente i tipi a più alto livello string e wstring.
string stringa_ascii; wstring stringa_utf16;Per quanto riguarda i tipi generici è disponibile anche una definizione per le stringhe immutabili.
LPTSTR stringa_generica; LPCTSTR stringa_immutabile;Le stringhe costanti sono definite con la sintassi seguente:
string stringa_vecchia = "stringa_ascii";
wstring stringa_nuova = L"stringa_unicode";
LPTSTR stringa_magica = _T("stringa_generica");
| Corso ASP.NET Corso completo per la creazione di applicazioni Web. A partire da 49 €. | |
| Corso OpenOffice Il software open-source per la gestione del lavoro d'ufficio. A soli 25 €. | |
| Corso Paint Shop Pro Grafica Web e fotoritocco col noto Corel PSP. A partire da 39 €. |