Wie ich in meinem Kommentar bereits erwähnte: Ich denke, dass dieser Gedankengang ein paar Fragen an Sie erforderlich macht, sozusagen:
-
Warum machen Sie diese Umstellung überhaupt?
-
Wissen Sie eigentlich, was WideCharToMultiByte()
tut?
Ich gebe freimütig zu, dass mir selbst nicht ganz klar ist, was genau WideCharToMultiByte()
tut; aber ich gehe einfach mal davon aus, dass es eine Zeichenkette aus breiten Zeichen in eine Zeichenkette aus Multibyte-Zeichen umwandelt. Ein kurzer Blick in die Dokumentation zeigt, dass dies in einen neuen Puffer erfolgt und die Länge der neuen Zeichenfolge zurückgegeben wird.
Das ist alles schön und gut. Das Problem ist, dass UTF-8 no tatsächlich eine breite Zeichenkodierung; und ISO-8859-1 ist no eine Multibyte-Kodierung. UTF-8 es eine Multibyte-Kodierung; aber das hilft Ihnen in diesem Fall nicht wirklich weiter.
Ich rate Ihnen daher, sich über Zeichenkodierungen zu informieren, insbesondere über die Unterschiede zwischen UTF-8 (Multibyte) und UTF-16 (Wide).
Ich schlage auch vor, dass Sie eine andere Schnittstelle für was auch immer Sie versuchen zu tun, die tatsächlich UTF-8 Zeichenfolgen akzeptiert; weil jede Schnittstelle, die ISO-8859-1 Zeichenfolgen erfordert, vor allem beim Umgang mit XML, scheint mir als wahnsinnig Legacy-y, grenzt an völlig verrückt.
Hätten Sie tatsächlich angegeben, was Sie im Großen und Ganzen erreichen wollen, könnten natürlich spezifischere Ratschläge gegeben werden.
Bearbeiten: Wenn ich Ihr Rätsel richtig verstehe, besteht das Problem darin, dass Sie eine korrekt formatierte und kodierte XML-Datei erhalten, die möglicherweise Zeichen außerhalb des ASCII-Bereichs (U+0 U+127) enthält. Wenn dies das Problem ist, wird die Verwendung von ISO-8859-1 in irgendeiner Form dazu führen, dass Sie später die meisten Kopfschmerzen haben werden:
Probleme mit der Kodierung
Wenn die Textdatei Folgendes enthalten kann irgendein Charakter außerhalb des ASCII-Bereichs liegt, dann kann sie möglicherweise jedes Zeichen außerhalb des ASCII-Bereichs. Und während UTF-8 darstellen kann jedes Zeichen ist dies bei ISO-8859-1 nicht der Fall.
Mit anderen Worten: Wenn Sie sich an eine Schnittstelle halten, die Kodierungen falsch behandelt, gehen im besten Fall Informationen unwiederbringlich verloren; im schlimmsten Fall stürzen Sie ab und verbrennen.
Mein Punkt ist: Hätscheln Sie nicht die kaputte Schnittstelle, und verwenden Sie niemals UTF-8.