C++
Internazionalizzazione in C ++
Ricerca…
Osservazioni
Il linguaggio C ++ non impone alcun set di caratteri, alcuni compilatori possono supportare l'uso di UTF-8 o anche UTF-16. Tuttavia non vi è la certezza che verrà fornito qualcosa oltre i semplici caratteri ANSI / ASCII.
Quindi tutto il supporto linguistico internazionale è definito dall'implementazione, dipende dalla piattaforma, dal sistema operativo e dal compilatore che si sta utilizzando.
Diverse librerie di terze parti (come la International Unicode Committee Library) che possono essere utilizzate per estendere il supporto internazionale della piattaforma.
Comprensione delle caratteristiche della stringa C ++
#include <iostream>
#include <string>
int main()
{
const char * C_String = "This is a line of text w";
const char * C_Problem_String = "This is a line of text ኚ";
std::string Std_String("This is a second line of text w");
std::string Std_Problem_String("This is a second line of ϯϵxϯ ኚ");
std::cout << "String Length: " << Std_String.length() << '\n';
std::cout << "String Length: " << Std_Problem_String.length() << '\n';
std::cout << "CString Length: " << strlen(C_String) << '\n';
std::cout << "CString Length: " << strlen(C_Problem_String) << '\n';
return 0;
}
A seconda della piattaforma (Windows, OSX, ecc.) E del compilatore (GCC, MSVC, ecc.), Questo programma potrebbe non riuscire a compilare, visualizzare valori diversi o visualizzare gli stessi valori .
Esempio di output sotto il compilatore Microsoft MSVC:
Lunghezza della stringa: 31
Lunghezza della stringa: 31
Lunghezza CString: 24
Lunghezza CString: 24
Ciò dimostra che sotto MSVC ogni carattere esteso utilizzato è considerato un singolo "carattere" e questa piattaforma supporta pienamente le lingue internazionalizzate.
Va notato tuttavia che questo comportamento è inusuale, questi caratteri internazionali sono memorizzati internamente come Unicode e quindi sono in realtà lunghi diversi byte. Ciò potrebbe causare errori imprevisti
Sotto il compilatore GNC / GCC l'output del programma è:
Lunghezza della stringa: 31
Lunghezza della corda: 36
Lunghezza CString: 24
Lunghezza CString: 26
Questo esempio dimostra che mentre il compilatore GCC utilizzato su questa piattaforma (Linux) supporta questi caratteri estesi, utilizza anche ( correttamente) diversi byte per memorizzare un singolo carattere.
In questo caso è possibile utilizzare caratteri Unicode, ma il programmatore deve prestare molta attenzione nel ricordare che la lunghezza di una "stringa" in questo scenario è la lunghezza in byte , non la lunghezza in caratteri leggibili .
Queste differenze sono dovute al modo in cui i linguaggi internazionali vengono gestiti su base per piattaforma e, cosa più importante, che le stringhe C e C ++ utilizzate in questo esempio possono essere considerate una matrice di byte , in modo che (per questo utilizzo) il linguaggio C ++ consideri un carattere (char) per essere un singolo byte .