Einzelnen Beitrag anzeigen

Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?

  Alt 24. Jul 2019, 17:58
mystring := UTF8Decode(#$C4+#$80+#$C4+#$86+'Hallo');

Das ergibt den String "ĀĆHallo"

Das Problem ist nun die "\x.." Zeichen in den entsprechenden 8-bit Zeichen Code umzuwandeln. Habe dazu schnell eine simple Routine geschrieben, die das macht. Diese müsste aber eventuell noch etwas überarbeitet werden, jenach dem was der Quellstring wirklich alles enthalten kann.

Delphi-Quellcode:
function DecodeCStyleString(const AStr: String): String;
var
  HexStr, ResultStr: RawByteString;
  i: Integer;
  IsCharLeadin: Boolean;
begin
  IsCharLeadin := False;
  i := 1;
  while i <= Length(AStr) do
  begin
    IsCharLeadin := AStr[i] = '\';
    if IsCharLeadin then
    begin
      IsCharLeadin := AStr[i+1] = 'x';
      if IsCharLeadin then
      begin
        inc(i, 2);
        HexStr := '$' + AStr[i] + AStr[i+1];
        ResultStr := ResultStr + AnsiChar(StrToInt(HexStr));

        inc(i);
      end
      else
        ResultStr := ResultStr + AnsiChar(AStr[i]);
    end
    else
      ResultStr := ResultStr + AnsiChar(AStr[i]);

    inc(i);
  end;

  Result := UTF8ToString(ResultStr);
end;

...

MyString := DecodeCStyleString('\xc4\x80\xc4\x86Hallo\xc4\x80');
// MyString ist nun "ĀĆHalloĀ"

Geändert von Rolf Frei (24. Jul 2019 um 18:20 Uhr)
  Mit Zitat antworten Zitat