Speichern von UTF-8-string in einen UnicodeString

In Delphi 2007 können Sie speichern eine UTF-8-string in einen WideString ausführt und dann den pass, der auf einer Win32-Funktion, z.B.

var
  UnicodeStr: WideString;
  UTF8Str: WideString;
begin
  UnicodeStr:='some unicode text';
  UTF8Str:=UTF8Encode(UnicodeStr);
  Windows.SomeFunction(PWideChar(UTF8Str), ...)
end;

Delphi 2007 hat keinen Einfluss auf die Inhalte der UTF8Str, d.h. es ist Links wie ein UTF-8 kodierter string gespeichert, in einen WideString ausführt.

Aber in Delphi 2010 bin ich kämpfen, um einen Weg finden, um das gleiche zu tun, also speichern einer UTF-8 kodierten string in einen WideString ausführt, ohne dass es automatisch konvertiert von UTF-8. Ich kann mich nicht übergeben Sie einen Zeiger auf eine UTF-8-string (oder RawByteString), z.B. die folgenden, wird offensichtlich nicht funktionieren:

var
  UnicodeStr: WideString;
  UTF8Str: UTF8String;
begin
  UnicodeStr:='some unicode text';
  UTF8Str:=UTF8Encode(UnicodeStr);
  Windows.SomeFunction(PWideChar(UTF8Str), ...)
end;
  • Ich aktualisiert meine Antwort mit der Lösung.
  • Zur info, die original-2007-code stört mit der UTF-8-Daten. Im Jahr 2007 UTF8Encode() zurückgegeben UTF-8-codierte AnsiString. In jeder version, die Zuweisung einer AnsiString zu einem WideString führt eine Ansi->UTF16-Wandlung mit der OS-Standard-Ansi-codepage. Die endgültige WideString NICHT enthalten UTF-8-Daten. Es enthält die UTF-16-Daten. Die Umwandlung hat kein Konzept, dass UTF-8 vorhanden war, und somit wahrscheinlich zu einer Beschädigung der Daten, wenn der ursprüngliche Eingang verwendet wird beliebige nicht-ASCII-Zeichen.
InformationsquelleAutor Mick | 2010-04-23
Schreibe einen Kommentar