Nachdem ich keine Funktion gefunden hab die mir die Arbeit abnimmt, hab ich se eben selber geschrieben.

Tut folgendes: HTML Typen wie #323; (irgendein komisches Polnisches l mit strich ;-) ) in nen WideString umwandeln:

function Html2WideString(s: string): widestring;
var
  i: integer;
  f: boolean;
  tmp: string;
begin
  i := Pos('#', s);
  if i = 0 then
  begin
    Result := s;
    exit;
  end;
  f := false;
  Result := '';
  tmp := '';
  for i := 1 to Length(s) do
  begin
    if (s[i] = '&') then Continue;
    if (s[i] = '#') then
    begin
      f := true;
      Continue;
    end;
    if f and (s[i] = ';') then
    begin
      f := false;
      Result := Result + WideChar(StrToInt(tmp));
      tmp := '';
      Continue;
    end;
    if f then
    begin
      tmp := tmp + s[i];
      Continue;
    end;
    Result := Result + s[i];
  end;
end;

lässt sich bestimmt noch optimieren, für mich reichts erstmal.

Update
Jetzt auch in Funktionierend

2 Kommentare zu “Delphi: UTF-8 / HTML => WideString”

  1. awokenMIND sagt:

    Bei Delphi muss ich immer an die Pascal-Programmierkurse in der Schule denken. Könnte gar nicht mehr so programmieren, der C/Java/PHP-Stil hat sich mir schon zu sehr verinnerlicht.

    Kurzer Optimierungstipp:
    Die beiden Inkrementierungen von i und j sind unnötig, mit einer kleiner Abänderung in den darauf folgenden 2 Zeilen fallen sie komplett weg und kosten somit nur noch “Auslesen+Inkrementieren” und nicht mehr “Auslesen+Inkrementieren+Zuweisung”.
    i := PosEx(’#', s, i+1);
    j := PosEx(’;', s, j+1);

    Ansonsten wären hier natürlich reguläre Ausdrücke feinstes Programmierergold… In Java wäre es somit einfach die Methode replaceAll(regexp, replacement) aus der String-Klasse. Vielleicht gibt’s das ja auch in Delphi.

    just my 2ct

  2. Daniel sagt:

    Zum Inkrementieren: Natürlich… *kopf -> tisch*

    hatte diese Zeilen nachträglich eingefügt und natürlich keinen Gedanken an Optimierung verschwendet.
    Theoretisch man da wirklich noch einiges rumbauen :-)

    btw. du siehst ja die Verfassungs-Uhrzeit :-)

Kommentar schreiben