Heim >Backend-Entwicklung >C++ >Wie konvertiere ich einen String (oder char) in einen wstring (oder wchar_t) in C?
Problem:
Wie können wir bei einer gegebenen String- oder Char-Variablen deren Inhalt einem Wstring oder zuweisen? wchar_t Variable?
Lösung:
Angenommen, die Eingabezeichenfolge ist in UTF-8 codiert, enthält die Standardbibliothek (C 11 und neuer) mehrere Techniken für Konvertierung zwischen UTF-8 und UTF-16:
#include <locale> #include <codecvt> #include <string> using namespace std; // Create a converter using the UTF-8/UTF-16 codecvt wstring_convert<codecvt_utf8_utf16>> converter; // Convert a narrow (UTF-8) string to a wide (UTF-16) string wstring wide = converter.from_bytes(narrow); // Convert a wide (UTF-16) string to a narrow (UTF-8) string string narrow = converter.to_bytes(wide);</codecvt_utf8_utf16></string></codecvt></locale>
Beispiel (Online kompilierbar und ausführbar):
#include <iostream> #include <locale> #include <codecvt> #include <string> int main() { // Sample input string in UTF-8 (see notes below for real-world scenarios): string s = "おはよう"; // Create a wstring to store the converted string wstring ws; // Convert the narrow (UTF-8) string to wide (UTF-16) std::wstring_convert<:codecvt_utf8_utf16>> conv; ws = conv.from_bytes(s); // Print the converted wstring wcout <p><strong>Hinweise:</strong></p> <ol> <li>Stellen Sie sicher, dass die Eingabezeichenfolge tatsächlich in UTF-8 codiert ist. Nicht-UTF-8-Codierungen führen nicht zur korrekten Konvertierung.</li> <li>Der codecvt_utf8_utf16-Konverter geht von der Little-Endian-Bytereihenfolge für UTF-16 aus. Wenn Ihr System die Big-Endian-Bytereihenfolge verwendet, sollten Sie die Verwendung von codecvt_utf8<wchar_t> in Betracht ziehen. stattdessen.</wchar_t> </li> </ol></:codecvt_utf8_utf16></string></codecvt></locale></iostream>
Das obige ist der detaillierte Inhalt vonWie konvertiere ich einen String (oder char) in einen wstring (oder wchar_t) in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!