Umlaute in IpHtmlPanel

Rund um die LCL und andere Komponenten

Umlaute in IpHtmlPanel

Beitragvon lzuser » 7. Nov 2017, 13:01 Umlaute in IpHtmlPanel

Win10-Laz1.6
Für einige kleine Hilfen möchte ein wenig HTML-Text in einem IpHtmlPanel ausgeben. Mit den mehrfach vorgeschlagenen Prozeduren klappt das.
Das Problem bleiben die deutschen Umlaute usw. Im Browser habe ich das mit <head><meta charset=iso-8859-1></head> gelöst, was hier aber nicht funktioniert.
Weitere erfolglose Versuche:
<meta charset="utf-8">
ö
&ouml
&#246
Was mache ich falsch? Wie kann ich das Problem lösen? Danke schon mal für Vorschläge.
lzuser
 
Beiträge: 57
Registriert: 20. Jun 2009, 15:00

Beitragvon lzuser » 12. Nov 2017, 16:29 Re: Umlaute in IpHtmlPanel

Ich antworte mir mal selbst, vielleicht hilft es anderen auch.
Meine Lösung: Zusätzliche Installation von HtmlViewer
https://github.com/BerndGabriel/HtmlViewer
Damit funktioniert die Anzeige auch der Umlaute wie gewünscht.
Schade nur, dass es wohl keine Lösung für das IpHtmlPanel gibt.
lzuser
 
Beiträge: 57
Registriert: 20. Jun 2009, 15:00

Beitragvon wp_xyz » 12. Nov 2017, 17:05 Re: Umlaute in IpHtmlPanel

Leider waren das viel zu spärliche Angaben, und ich dachte, da kommt sicher noch irgendwas.

Ich bin relativ sicher, dass IpHTMLPanel mit Umlauten klarkommt. Du müsstest mal die html-Datei posten oder verlinken, damit man sich die mal ansehen kann.
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon lzuser » 12. Nov 2017, 17:59 Re: Umlaute in IpHtmlPanel

Ganz primitiver Text:

Code: Alles auswählen
 
var Inhalt:string;
...
Inhalt:=
'<html>'
+'<head>'
+'<title>Titelleisten-Text</title>'
+'<meta charset="iso-8859-1">'
+'</head>'
+'<body bgcolor="#ffff00">'
+'<h2>Testen</h2> Testen ist <b>immer</b> gut.<br>'
+' Text<i>kursiv</i> <sub>unten</sub> Text <sup>oben</sup><br>'
+'Umlaute: öäü ÖÄÜ ßß<br>'
+'</body>'
+'</html>';
 
IpHtmlPanel.SetHtmlFromStr(Inhalt);
 


Bis auf die Umlaute (öäü ÖÄÜ ßß) erscheint der Rest wie gewünscht.
lzuser
 
Beiträge: 57
Registriert: 20. Jun 2009, 15:00

Beitragvon wp_xyz » 12. Nov 2017, 18:39 Re: Umlaute in IpHtmlPanel

Wenn du oben unter Meta als charset iso-8859-1 einträgst, dann muss die Datei natürlich genau so codiert sein. Du schreibst den html-Text aber in den Lazarus-Quelltext, und der ist UTF-8. Und hier hat IproHtmlPanel offenbar ein Problem, denn das Meta-Tag wird offenbar nicht richtig ausgewertet: die interne Variable FDocCharSet bleibt weiterhin auf 'iso-8859-1', auch wenn unter Meta 'utf-8' eingetragen ist. Mal sehen, ob ich das finde...

Zur Kontrolle: speichere ich dein html (mit iso-8859-1) als eigene Datei, wobei ich im Notepad++ die Dateikodierung genauso einstelle, dann werden die Umlaute vom IproHtmlPanel korrekt angezeigt.
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon wp_xyz » 12. Nov 2017, 20:10 Re: Umlaute in IpHtmlPanel

Fehler gefunden. Das Charset-Attribut des Meta-Tags sollte in der Trunk-Version nun nicht mehr ignoriert werden.

In deinem konkreten Projekt (html als string im Pascal-Quelltext) musst du nur charset="utf-8" ins Meta-Tag schreiben (statt "iso-8859-1").

Code: Alles auswählen
var Inhalt:string =
'<html>'
+'<head>'
+'<title>Titelleisten-Text</title>'
+'<meta charset="utf-8">'      // <--- hier "utf-8"
+'</head>'
+ ...
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon lzuser » 13. Nov 2017, 07:58 Re: Umlaute in IpHtmlPanel

sollte in der Trunk-Version nun nicht mehr ignoriert werden

Diesen Satz habe ich nicht verstanden. Hast du irgendwas bei IpHtmlPanel verändert oder zusätzlich eingestellt?

<meta charset="utf-8"> hatte ich wie berichtet doch schon probiert, selbst bei diesem einfachsten Beispiel funktioniert es nicht.
Zwischendurch: Danke für dein Mitdenken.
lzuser
 
Beiträge: 57
Registriert: 20. Jun 2009, 15:00

Beitragvon wp_xyz » 13. Nov 2017, 09:30 Re: Umlaute in IpHtmlPanel

lzuser hat geschrieben:
sollte in der Trunk-Version nun nicht mehr ignoriert werden

Diesen Satz habe ich nicht verstanden. Hast du irgendwas bei IpHtmlPanel verändert oder zusätzlich eingestellt?

Ja. Trunk ist die Entwicklerversion von Lazarus, du brauchst SVN um darauf zuzugreifen. Oder du verwendest FPCUpDeluxe für die Installation.

Die Änderungen sind überschaubar und können auch leicht in eine andere Version des IpHtmlPanels eingebaut werden:
  • Öffne die Datei (lazarus)/components/turbopower_ipro/iphtmlgenerated.inc
  • In der Nähe von Zeile 110 gibt es die Aufzählung TIpHtmlAttributesSet. Füge zwischen htmlAttrCELLSPACING und htmlAttrCHECKED den Wert htmlAttrChARSET ein
  • Weiter unten, etwa Zeile 400, gibt es das Array TIpHtmlAttributesNames. Füge ebenfalls zwischen 'CELLSPACING' und 'CHECKED' den String 'CHARSET' ein (groß geschrieben).
  • Öffne die Datei (lazarus)/components/turbopower_ipto/iphtml.pas
  • Suche die Prozedur TIpHtml.ParseMeta und ersetze sie durch diesen Code:
    Code: Alles auswählen
    procedure TIpHtml.ParseMeta;
    {$IFDEF IP_LAZARUS}
    var
      i,j: Integer;
    {$ENDIF}
    begin
      with TIpHtmlNodeMETA.Create(Parent) do begin
        HttpEquiv := FindAttribute(htmlAttrHTTP_EQUIV);
        Name := FindAttribute(htmlAttrNAME);
        Content := FindAttribute(htmlAttrCONTENT);
        {$IFDEF IP_LAZARUS}
        if SameText(HttpEquiv, 'content-type') and not FHasBOM then begin
          j := pos('charset=', lowercase(Content));
          if j>0 then begin
            j := j+8;
            i := j;
            while (j<=Length(Content)) do begin
              if Content[j] in [' ',';','"',','] then
                break;
              inc(j);
            end;
            fDocCharset := copy(content, i, j-i);
          end else
            fDocCharset := FindAttribute(htmlAttrCHARSET);
        end;
        {$ENDIF}
        Scheme := FindAttribute(htmlAttrSCHEME);
      end;
      NextToken;
    end;
  • Anschließend das Package turbopoweripro.lp neu übersetzen
  • Und vorher nicht vergessen, eine Sicherungskopie der geänderten Dateien anlegen

lzuser hat geschrieben:<meta charset="utf-8"> hatte ich wie berichtet doch schon probiert, selbst bei diesem einfachsten Beispiel funktioniert es nicht.

Klar, es liegen ja zwei Fehler vor: zum einen der oben korrigierte Fehler im IpHtmlPanel, der das CharSet-Attribut im Meta-Tag ignoriert hat. Und zum anderen dein Fehler, weil dein Html-Quelltext UTF8-kodiert ist, du dem Browser aber sagst, es wäre iso-8859-1.
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon lzuser » 15. Nov 2017, 16:45 Re: Umlaute in IpHtmlPanel

Hochachtung für dein überaus großes Engagement. Ich bin auf jeden Fall ein Stück schlauer geworden.
Ob ich mir den Weg zutraue, weiss ich noch nicht.
Es wäre schön, wenn die Fehlerbeseitigung in die nächste Laz-Version einfließen würden.
Vielen Dank nochmal.
lzuser
 
Beiträge: 57
Registriert: 20. Jun 2009, 15:00

Beitragvon wp_xyz » 15. Nov 2017, 17:06 Re: Umlaute in IpHtmlPanel

lzuser hat geschrieben:Es wäre schön, wenn die Fehlerbeseitigung in die nächste Laz-Version einfließen würden.

Nachdem die Version 1.8 quasi vor der Tür steht, bin ich zögerlich die Änderungen noch reinzuquetschen. Ich hab's zwar getestet, aber man weiß nie, was man da alles übersieht, und jemand anders sollte das schon nochmals ausprobieren. Aber wenn du's schon nicht machst, dann müssen wir halt auf die Community warten, und damit dauert's bis zu Version 1.10.
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried