Hmmm.
Also ein Problem ist ersmal, daß seit mindestens Delphi 2009 (hab nie im 2007er nachgesehn) die Delphi-Strings (AnsiString, RawByteString, UTF8String, also alle AnsiString-Nachfahren und natürlich der neue UnicodeString) über eine CodePage-Information verfügen.
Anhand dieser CodePage wird notfalls eine Convertierung vorgenommen.
Delphi erkennt also, daß du einen UTF-8-kodierten String (AnsiString+CP_UTF8) an einen
Unicode-String (WideString) übergeben willst und wandelt den enthaltenen Text "korrekt" um ... macht also aus dem UTF-8 wieder
Unicode.
Das andere Problem ist, daß
wir nicht wissen wie Windows das, bzw. deren Code, intern aus dem WideString/PWideChar einen PAnsiChar/LPCSTR macht.
(das müßtest du mal erdebuggen oder eben ausprobieren)
Versuch es mal so:
Delphi-Quellcode:
function WUConvert(const S: string): WideString;
var
A: UTF8String;
begin
A := UTF8Encode(S);
SetCodePage(A, CP_ACP, False);
Result := A;
end;
// und falls es doch nicht geht, dann eventuell so?
function WUConvert(const S: string): WideString;
var
A: UTF8String;
begin
A := UTF8Encode(S);
SetCodePage(A, $FFFF, False);
Result := A;
end;
// oder
function WUConvert(const S: string): WideString;
var
A: UTF8String;
i: Integer;
begin
A := UTF8Encode(S);
SetLength(Result, Length(A));
for i := 1 to Length(A) do
Result[i] := A[i];
end;
PS: Dein
<DlmSDK><DlmConfig><Display CodePage="..." /></DlmConfig></DlmSDK>
ist eh nur
ASCII, drum kann man sich dort alles sparen und kann es problemlos direkt übergeben.
PPS: Sicher daß “ und ” korrekt sind und nicht eigentlich " dort hingehört?
Ein korrektes
XML ist das so jedenfalls nicht.