Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#21

AW: Kodierung in UCS-2 Little Endian

  Alt 9. Okt 2019, 09:55
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;
  Mit Zitat antworten Zitat