Der C++-Sprachstandard kennt kein explizites Encoding-Konzept. Er enthält nur eine undurchsichtige Vorstellung von einem "System-Encoding", für das wchar_t
ein "ausreichend groß" ist.
Um vom undurchsichtigen System-Encoding in ein explizites externes Encoding zu konvertieren, muss eine externe Bibliothek verwendet werden. Die Bibliothek der Wahl wäre iconv()
(von WCHAR_T
nach UTF-8
), die Bestandteil von Posix ist und auf vielen Plattformen verfügbar ist, obwohl auf Windows die Funktion WideCharToMultibyte
garantiert UTF-8 erzeugt.
C++11 fügt neue UTF8 Literals in Form von std::string s = u8"Hallo Welt: \U0010FFFF";
hinzu. Diese sind bereits in UTF-8 vorliegend, können aber nicht direkt mit dem undurchsichtigen wstring
interagieren, außer auf die von mir beschriebene Weise.
Siehe diese Frage für ein wenig mehr Hintergrundinformationen.
0 Stimmen
Welche Codierung nehmen Sie für wstring an?
0 Stimmen
Wenn Sie std::string verwenden und dies in der Konsole, dem Linux-Terminal (zumindest auf Ubuntu), ausgeben, wird es standardmäßig als utf-8 interpretiert.
0 Stimmen
@Darcy: Das ist wahr, wenn die aktuelle Sprachumgebung UTF-8 ist, was auf den meisten aktuellen Linux-Distributionen standardmäßig der Fall ist, aber es ist nicht garantiert.
0 Stimmen
@DavidHeffernan: std::wstring unter Linux ist immer UTF-32, oder?