umlaute in memo anzeigen

Antworten
A-KI
Beiträge: 16
Registriert: Do 20. Jan 2011, 00:12

umlaute in memo anzeigen

Beitrag von A-KI »

servus

ich möchte den quelltext einer html seite in einem memo anzeigen lassen

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
 
  sl : tstringlist;
begin
     sl := tstringlist.Create;
    try
      httpgettext(edit1.Text,sl) ;
      memo1.Lines.Add(ansitoutf8(sl.text) );
    finally
    sl.Free;
    end;
end;   


klappt soweit auch nachdem ich ansitoutf8 hinzugefügt habe davor wurde mir nichts im memo angezeigt.
nun enthält der quelltext auch sonderzeichen. diese werden leider nicht richtig dargestellt.

wie z.b. ß = ß

wie bekomme ich das denn hin das das ß als ß angezeigt wird?
Zuletzt geändert von A-KI am Do 30. Jan 2014, 15:20, insgesamt 1-mal geändert.
Lazarus 1.0.14
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: umlaute in mnemo anzeigen

Beitrag von mschnell »

Die remote Website gibt Dir über httpget Daten-Bytes , die *irgendwie* codiert sind (da gibt es hunderte Möglichkeiten inklusive z.B. "HTML Entitäten").

Um sie zur Anzeige zu bringen, interpretiert ein Browser entsprechende Einstellungen, die im HTML-Header stehen, außerdem berücksichtigt er Default-Einstellungen, die in der Konfiguration des Browsers hinterlegt wurden.

Du musst also zunächst herausbekommen, in welcher Codierung der Text bei Dir ankommt und dann die passende Konvertierungs-Routine (beim aktuellen Lazarus zu "UTF-8") aufrufen.

(Der eigentliche "technische" Quelltext der HTML-Seite ist ohnehin 7-bit ASCII, da gibt es kein "ß". Komplexere Codierungen kommen hauptsächlich da vor, wo irgendetwas vom Browser angezeigt werden soll dazu siehe oben.)

-Michael
Zuletzt geändert von mschnell am Do 30. Jan 2014, 13:04, insgesamt 2-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2641
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: umlaute in mnemo anzeigen

Beitrag von m.fuchs »

Das sind keine Sonderzeichen sondern HTML-Entitäten.
Die stehen also im Original Quelltext schon so drin. Wenn du da lieber die Sonderzeichen haben möchtest, musst du konvertieren. Zum Beispiel mit folgender (sicherlich verbesserungswürdiger) Funktion:

Code: Alles auswählen

function DecodeEntities(EscapedString: String): String;
var
  FoundPos, FoundEndPos: LongInt;
  Code: String;
  DecodedChars: String;
begin
  FoundPos := 1;
  Result := EscapedString;
  FoundPos := PosEx('&#', Result, FoundPos);
  while (FoundPos <> 0) and (FoundPos < Length(Result) - 2) do begin
    FoundEndPos := PosEx(';', Result, FoundPos);
    Code := Copy(Result, FoundPos + 2, FoundEndPos - FoundPos - 2);
    try
      DecodedChars := WideChar(StrToInt(Code));
      Result := AnsiReplaceStr(Result, '&#' + Code + ';', UTF8Encode(DecodedChars));
    except on EConvertError do
      Inc(FoundPos);
    end;
    FoundPos := PosEx('&#', Result, FoundPos);
  end;
end;                 

Benötigt StrUtils.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: umlaute in mnemo anzeigen

Beitrag von theo »


A-KI
Beiträge: 16
Registriert: Do 20. Jan 2011, 00:12

Re: umlaute in memo anzeigen

Beitrag von A-KI »

hi

leider klappt es noch nicht ganz so wie ich es möchte

jetzt bekomme ich die zeichen öäü als ? angezeigt unter win und linux

im quelltext steht das ü mal als ü und mal als &#252; z.b.

Code: Alles auswählen

var
 
  sl : tstringlist;
begin
     sl := tstringlist.Create;
    try
      httpgettext(edit1.Text,sl) ;
      sl.text := ansitoutf8(sl.text)
      memo1.Lines.Add(DecodeEntities(sl.text) );
    finally
    sl.Free;
    end;
end;
Lazarus 1.0.14
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: umlaute in memo anzeigen

Beitrag von mschnell »

A-KI hat geschrieben:leider klappt es noch nicht ganz so wie ich es möchte
"HTML-Entitäten" sind keine Standard-Funktionalität. Da ist dann wohl Debuggen angesagt :twisted:
A-KI hat geschrieben:unter win und linux
wäre ja auch schlimm, wenn ein Lazarus-Programm, das keine direkten System-Zugriffe macht, sich unter verschiedenen Systemen unterschiedlich verhalten würde. Das Muss Lazarus regeln !

-Michael

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: umlaute in memo anzeigen

Beitrag von hde »

mschnell hat geschrieben:Die remote Website gibt Dir über httpget Daten-Bytes , die *irgendwie* codiert sind (da gibt es hunderte Möglichkeiten inklusive z.B. "HTML Entitäten").

die in einem Memofeld anzuzeigen geht nun mal nicht ohne Aufwand, das passt einfach nicht zusammen.

versuch doch mal ThtmlPort

hde

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: umlaute in memo anzeigen

Beitrag von mschnell »

siehe -> http://de.selfhtml.org/html/referenz/zeichen.htm

Wer diesen Unsinn erfunden hat gehört geteert und gefedert.

-Michael

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: umlaute in memo anzeigen

Beitrag von Michl »

A-KI hat geschrieben:hi

leider klappt es noch nicht ganz so wie ich es möchte

jetzt bekomme ich die zeichen öäü als ? angezeigt unter win und linux

im quelltext steht das ü mal als ü und mal als &#252; z.b.

Code: Alles auswählen

var
 
  sl : tstringlist;
begin
     sl := tstringlist.Create;
    try
      httpgettext(edit1.Text,sl) ;
      sl.text := ansitoutf8(sl.text)
      memo1.Lines.Add(DecodeEntities(sl.text) );
    finally
    sl.Free;
    end;
end;

Habe es eben nochmal getestet. Zumindest unter Win7 funktioniert es gem. http://www.lazarusforum.de/viewtopic.php?f=26&t=7132:

Code: Alles auswählen

uses ..., HTMLDefs;
...
var
  sl : tstringlist;
begin
  sl := tstringlist.Create;
  try
    httpgettext(edit1.Text, sl);
    HtmlToStr(sl);
    memo1.Lines.Assign(sl);
  finally
    sl.Free;
  end;
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

A-KI
Beiträge: 16
Registriert: Do 20. Jan 2011, 00:12

Re: umlaute in memo anzeigen

Beitrag von A-KI »

hi

habe es jetzt hinbekommen

ich lese das charset der seite aus und wandele es dan mittels unit synachar von synapse nach utf8 um.
Lazarus 1.0.14
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: umlaute in memo anzeigen

Beitrag von mschnell »

Super !

Gut zu wissen, dass es das gibt. (Ist aber auch ein ziemlich dickes Teil :D )

-Michael

Antworten