UTF-8 in UTF-16 umwandeln
-
Hallo,
ich versuche grade eine UTF-8 Textdatei per ReadFile einzulesen und diesen Text dann z.B. per DrawTextW auszugeben. Allerdings nutzen die ganzen Windows Unicode-Funktionen UTF-16. Wie kann ich das am sinnvollsten hin- und her-umwandeln?
Soweit ich das verstanden habe ist MultibyteToWidechar eigentlich für das Umwandeln von ANSI nach Unicode gedacht, aber UTF-8 ist ja bereits Unicode.
Wie krieg ich das am besten hin?
-
MultibyteToWidechar ist für das Umwandeln von "Multibyte" nach "Widechar" (wer hätte das gedacht...)
Deshalb ist es genau das richtige...
Die Codepage (erster Parameter) ist dann logischerweise: CP_UTF8
-
UTF-8 ist ein Multibyte Zeichensatz, da die Anzahl der Bytes pro Zeichen variieren kann. UTF-16 oder UCS-2 (Unicode) hat dagegen eine feste Anzahl an Bytes pro Zeichen, nämlich zwei wie ein wchar_t. Deshalb musst du MultiByteToWideChar verwenden.
Das nur mal nebenbei.
-
... UCS-2 hat genau 2-Bytes pro Codepoint.
UTF-16 hat hingegen 2 oder 4 Bytes, je nach Surrogate...
-
Aha wieder was gelernt. Warum gibt es bei MultiByteToWideChar/WideCharToMultiByte keine Möglichkeit auf UTF-16 zu konvertieren?
-
WideChar ist unter Windows immer UTF-16 (bzw. UCS-2)... somit wandelt MultiByteToWideChar immer nach UTF-16 (UCS-2).