Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit UTF-8 Bytes (https://www.delphipraxis.net/132339-problem-mit-utf-8-bytes.html)

PeterPanino 10. Apr 2009 02:46


Problem mit UTF-8 Bytes
 
Hallo, ich habe gerade gemerkt, dass Webbrowser (Firefox, IE) die deutschen Umlaute fehlerhaft darstellen, wenn der HTML-Datei nicht die 3 UTF-8 Erkennungs-Bytes ($EF $BB $BF) vorangestellt sind.

Die HTML-Datei hat folgende Kennung:

Zitat:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="de" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
Wenn ich eine Stringliste mit der Methode SaveToFile speichere, werden die 3 Bytes natürlich nicht gespeichert. Auch der Versuch, die 3 Bytes manuell einzufügen, scheitert: Der Browser stellt die Umlaute dann immer noch fehlerhaft dar:

Delphi-Quellcode:
MyStringList[0] := Chr($EF) + Chr($BB) + Chr($BF) + MyStringList[0];
Aber trotzdem wird die Datei in einem Hex-Editor ganz normal mit den 3 Bytes am Anfang dargestellt!!!

jaenicke 10. Apr 2009 03:24

Re: Problem mit UTF-8 Bytes
 
Diese Bytes sind ja nicht das Entscheidende, sondern die Codierung als UTF-8, und die hast du bisher ja nicht gezeigt. Zudem kann man das glaube ich auch im Header noch einmal setzen, der mit der Datei geschickt wird (per PHP ggf.). Der sollte natürlich auch auf UTF-8 lauten. Wie hast du die denn gemacht? Dies funktioniert jedenfalls problemlos, auch ohne diese Bytes:
Delphi-Quellcode:
var
  test: TStringList;
begin
  test := TStringList.Create;
  test.Text := Utf8Encode('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
    + #13#10'<html xmlns="http://www.w3.org/1999/xhtml">'
    + #13#10'<head>'
    + #13#10'<meta http-equiv="Content-Language" content="de" />'
    + #13#10'<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'
    + #13#10'<title>Example</title>'
    + #13#10'</head>'
    + #13#10'<body>'
    + #13#10'Das ist ein Text mit ä, ö und ü als Umlaute drin.'
    + #13#10'</body>'
    + #13#10'</html>');
  test.SaveToFile('b:\xyz.html');
  test.Free;
Die Bytes kannst du natürlich zusätzlich auch hinzufügen.

mjustin 10. Apr 2009 06:15

Re: Problem mit UTF-8 Bytes
 
Zitat:

Zitat von PeterPanino

Wenn ich eine Stringliste mit der Methode SaveToFile speichere, werden die 3 Bytes natürlich nicht gespeichert.

SaveToFile hat einen zweiten Parameter zur Angabe des Encodings:

Delphi-Quellcode:
SaveToFile('filename.ext', TEncoding.UTF8);
sollte funktionieren ...

Cheers,

jaenicke 10. Apr 2009 06:45

Re: Problem mit UTF-8 Bytes
 
// EDIT:
Ich hatte den falschen Link angeschaut.

Das ist neu in Delphi 2009. Aber in früheren Versionen von Delphi gibts das nicht. Da hier im Profil ja 2009 steht, ist das also das richtige.

PeterPanino 10. Apr 2009 13:56

Re: Problem mit UTF-8 Bytes
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mjustin
SaveToFile hat einen zweiten Parameter zur Angabe des Encodings:

Delphi-Quellcode:
SaveToFile('filename.ext', TEncoding.UTF8);
sollte funktionieren ...

Cheers,

VIELEN DANK! Jetzt funktioniert's! Aber wieso wird dieser Parameter nicht in der Parameterliste im Tooltip dieser Methode angezeigt?:

http://img518.imageshack.us/img518/6393/savetofile.gif

[edit=mkinzler]Img-Tag durch Url-Tag ersetzt, Bild angehängt Mfg, mkinzler[/edit]

mjustin 10. Apr 2009 14:24

Re: Problem mit UTF-8 Bytes
 
Zitat:

Zitat von PeterPanino
Zitat:

Zitat von mjustin
SaveToFile hat einen zweiten Parameter zur Angabe des Encodings:

Delphi-Quellcode:
SaveToFile('filename.ext', TEncoding.UTF8);
sollte funktionieren ...

Cheers,

VIELEN DANK! Jetzt funktioniert's! Aber wieso wird dieser Parameter nicht in der Parameterliste im Tooltip dieser Methode angezeigt?:

http://img518.imageshack.us/img518/6393/savetofile.gif

Delphi ToolTips sind ja nicht gerade ein Highlight ...

Wenn man SL.SaveToFile(); schreibt und die Einfügemarke (Caret) zwischen die Klammern setzt und dann Strg + Umschalt + Leertaste drückt, sieht man alle möglichen Signaturen (in diesem Fall zwei).

Puh, wenigstens das funktioniert :)

p.s. wie macht man die schicken Screenshots mit Papiereffekt? HyperSnapz? Gimp?

Cheers,

[edit=mkinzler]Quote an Änderung angepasst Mfg, mkinzler[/edit]

generic 10. Apr 2009 15:17

Re: Problem mit UTF-8 Bytes
 
Die 3 Bytes sind übrigens der BOM - Byte Order Marker.

fkerber 10. Apr 2009 15:22

Re: Problem mit UTF-8 Bytes
 
Hi!

Könntet ihr bitte das Bild als Anhang machen? Dann sind wir nicht von externen, u.U. langsamen Servern abhängig?
Im Quote könnte man dann auch bitte das Bild entfernen, danke.

Im Regelfall sind solche Full-Quotes auch nicht unbedingt sinnvoll...


Ciao, Frederic

mkinzler 10. Apr 2009 15:26

Re: Problem mit UTF-8 Bytes
 
Ich hab das mal erledigt. Aber das nächste mal selber machen!

PeterPanino 10. Apr 2009 17:08

Re: Problem mit UTF-8 Bytes
 
Zitat:

Zitat von fkerber
Könntet ihr bitte das Bild als Anhang machen? Dann sind wir nicht von externen, u.U. langsamen Servern abhängig?

Gute Idee - die meisten Server in den USA werden ja eh bald abgeschaltet, wie man so hört, bzw. werden wegen unbezahlter Stromrechnungen eh bald den Geist aufgeben ... noch mal schnell das Internet auf meiner USB-Festplatte speichern ... so, fertig! ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz