C++
Internationalisierung in C ++
Suche…
Bemerkungen
Die Sprache C ++ diktiert keinen Zeichensatz, einige Compiler die Verwendung von UTF-8 unterstützen können, oder auch UTF-16. Es besteht jedoch keine Gewissheit, dass etwas anderes als einfache ANSI / ASCII-Zeichen bereitgestellt wird.
Daher ist die gesamte internationale Sprachunterstützung durch die Implementierung definiert, abhängig davon, welche Plattform, welches Betriebssystem und welcher Compiler Sie verwenden.
Mehrere Drittanbieter-Bibliotheken (wie die International Unicode Committee Library), mit denen die internationale Unterstützung der Plattform erweitert werden kann.
C ++ - Zeichenfolgenmerkmale verstehen
#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;
}
Je nach Plattform (Windows, OSX usw.) und Compiler (GCC, MSVC usw.) wird dieses Programm möglicherweise nicht kompiliert, zeigt andere Werte an oder zeigt dieselben Werte an .
Beispielausgabe unter dem Microsoft MSVC-Compiler:
Saitenlänge: 31
Saitenlänge: 31
CS-Länge: 24
CS-Länge: 24
Dies zeigt, dass unter MSVC jedes der verwendeten erweiterten Zeichen als einzelnes "Zeichen" betrachtet wird und diese Plattform international unterstützte Sprachen vollständig unterstützt.
Es ist jedoch zu beachten, dass dieses Verhalten ungewöhnlich ist. Diese internationalen Zeichen werden intern als Unicode gespeichert und sind daher tatsächlich mehrere Bytes lang. Dies kann zu unerwarteten Fehlern führen
Unter dem GNC / GCC-Compiler lautet die Programmausgabe:
Saitenlänge: 31
Saitenlänge: 36
CS-Länge: 24
CS-Länge: 26
Dieses Beispiel zeigt, dass der auf dieser (Linux-) Plattform verwendete GCC-Compiler zwar diese erweiterten Zeichen unterstützt, dass er jedoch mehrere Bytes ( richtig) verwendet , um ein einzelnes Zeichen zu speichern.
In diesem Fall ist die Verwendung von Unicode-Zeichen möglich, der Programmierer muss jedoch sorgfältig darauf achten, dass die Länge einer "Zeichenfolge" in diesem Szenario der Länge in Byte und nicht der Länge in lesbaren Zeichen entspricht .
Diese Unterschiede sind darauf zurückzuführen, wie internationale Sprachen auf Plattformbasis gehandhabt werden - und was noch wichtiger ist, dass die in diesem Beispiel verwendeten C- und C ++ - Zeichenfolgen als ein Array von Bytes betrachtet werden können , sodass (für diese Verwendung) die C ++ - Sprache berücksichtigt wird ein Zeichen (Zeichen), um ein einzelnes Byte zu sein .