In Delphi ist der UCS4 Deklariert als Cardinal
UCS4Char = type Cardinal;
und
UCS4String = array of UCS4Char;
Leider ist in der Function UCS4StringToUnicodeString ein Fehler.....
es wird immer ein UCS4 char zu wenig ausgewertet........
Also selber machen.
Delphi-Quellcode:
function myUCS4StringToUnicodeString(const S: UCS4String): UnicodeString;
var
I: Integer;
CharCount: Integer;
Tmp: array of Char;
begin
SetLength(Tmp, Length(S) * 2); //Maximum possible number of characters
CharCount := -1;
I := 0;
while I < Length(S) do // Removed -1
begin
if S[I] >= $10000 then
begin
Inc(CharCount);
Tmp[CharCount] := WideChar((((S[I] - $00010000) shr 10) and $000003FF) or $D800);
Inc(CharCount);
Tmp[CharCount] := WideChar(((S[I] - $00010000) and $000003FF)or $DC00);
end
else
begin
Inc(CharCount);
Tmp[CharCount] := WideChar(S[I]);
end;
Inc(I);
end;
SetString(Result, PChar(Tmp), CharCount + 1);
end;
procedure TForm32.Button1Click(Sender: TObject);
const
u41: UCS4Char = 128064;
u42: UCS4Char = 128125;
u43: UCS4Char = 128148;
Var
test: Ucs4String;
temp: String;
begin
test := [u41, u42, u43];
temp := myUCS4StringToUnicodeString(test);
ShowMessage(temp);
end;