Sehe ich das richtig dass dem armen Mann im Endeffekt empfohlen wurde "Wird schon nichts außerhalb von UCS-2 vorkommen"?
Wenn es für mich noch nicht zu früh am Morgen ist dann entfernt man aus einem String doch einfach nur die Surrogates und hat einen String wo jedes Zeichen in die
Basic Multilingual Plane, also 16 Bit, passt:
Delphi-Quellcode:
uses
System.SysUtils,
System.Character;
procedure RemoveNonUCS2(var str: String; const replacement: String = '');
var
index: Integer;
stringBuilder: TStringBuilder;
begin
stringBuilder := TStringBuilder.Create(str.Length);
try
index := 0;
repeat
if Char.IsSurrogatePair(str, index) then
begin
Inc(index);
if (not replacement.IsEmpty()) then
stringBuilder.Append(replacement);
end
else
stringBuilder.Append(str.Chars[index]);
Inc(index);
until (index >= str.Length);
str := stringBuilder.ToString();
finally
stringBuilder.Destroy();
end;
end;