So verwenden Sie den MultibytetowiDechar ordnungsgemäß
-
21-12-2019 - |
Frage
Ich verwende MultiBytetowiDechar, um meine Saite in ein Wstring umzuwandeln.Ich versuche zuerst, die erforderliche Größe für mein Wstring zu erhalten.Entsprechend der Dokumentation, die 0 als das letzte Argument vorbei ist, sollte dies das erreichen.Die Verwendung von MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);
gibt 0 als die erforderliche Größe des Wstring-Puffers zurück.Ich habe bestätigt, dass Str eine nicht leere Zeichenfolge ist.Was mache ich hier falsch?
Lösung
von der MSDN-Dokumentation :
für utf-8 oder -code Page 54936 (GB18030, beginnend mit Windows Vista) müssen DWFLAGs auf 0 oder MB_ERR_INVALID_Chars eingestellt sein.Andernfalls schlägt die Funktion mit error_invalid_flags aus.
Sie verwenden CP_UTF8, führen aber auch die MB_COMPOSITE-Flagge an, weshalb es fehlgeschlagen ist.