Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TRichEdit und UTF-8


hydemarie - Sa 18.02.17 04:02
Titel: TRichEdit und UTF-8
Mal wieder eine dieser klassisch doofen Fragen:

Angenommen, ich habe unter Delphi 10.1 ein TRichEdit-Feld, das ich per LoadFromFile() mit einer UTF-8-Datei befülle:
Wie bringe ich es dazu, Umlaute auch als Umlaute und nicht als Durcheinander anzuzeigen?

In meinem Texteditor sieht die fragliche Datei so aus wie erwartet.


Delete - Sa 18.02.17 07:42

- Nachträglich durch die Entwickler-Ecke gelöscht -


Slipstream - Sa 18.02.17 14:09

user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
Angenommen, ich habe unter Delphi 10.1 ein TRichEdit-Feld, das ich per LoadFromFile() mit einer UTF-8-Datei befülle: Wie bringe ich es dazu, Umlaute auch als Umlaute und nicht als Durcheinander anzuzeigen? In meinem Texteditor sieht die fragliche Datei so aus wie erwartet.


Wie machst du sicher, dass deine Textdatei aus UTF8 codiert ist? Ich vermute, es ist nicht UTF8.

Gute Texteditoren verwenden Byte Order Mark [https://de.wikipedia.org/wiki/Byte_Order_Mark], kurz BOM. Das ist eine Kennzeichnung für die Codierung des Textes. Für Fortgeschrittene bietes sich an, die Textdatei mit einem Hexeditor zu betrachten, um zu sehen, ob zB Umlaute aus zwei Bytes bestehen. Am einfachsten wäre es aber, einen Texteditor zu verwenden, der BOMs schreibt, weiss ich aber jetzt keinen auswendig.


hydemarie - Sa 18.02.17 16:28

Also im Texteditor steht, es sei UTF-8. Mein Delphiprogramm zeigt trotzdem eine Kombination aus zwei Zeichen an. (Das macht nebenbei eine meiner Funktionen zum Markieren der ganzen Zeile kaputt, denn Length verzählt sich...)


Delete - Sa 18.02.17 16:32

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Sa 18.02.17 20:30

Texteditor:

2IEzASO

TRichEdit:

Qs26Hlr

:?

Nachtrag: TEncoding.UTF8 funktioniert, danke. Kann ich das Encoding auch irgendwie aus dem OpenFileDialog auslesen? Der hat unten rechts immerhin eine Auswahlbox dafür...


Delete - So 19.02.17 08:12

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - So 19.02.17 18:23

Die Dateierweiterungen habe ich - faul, wie ich bin - per Properties-Fenster definiert. Danke, das Encoding scheint zu funktionieren. :)


hydemarie - So 19.02.17 21:10

Funktioniert nur so halb, Auslesen kann ich es nicht sinnvoll. ANSI wird als Encoding 1252 erkannt, bei UTF-8 ist das Encoding aber nil.

Egal, ich lass' das jetzt so. :lol:


Delete - So 19.02.17 23:52

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - So 19.02.17 23:54

Naja, nil kann ich schlecht als Encoding setzen. :nixweiss:


Delete - Mo 20.02.17 00:00

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Mo 20.02.17 00:36

Das gibt bei mir eine Access Violation. Irgendwie gibt unter Delphi ziemlich viel eine Access Violation. Ganz schön anstrengend. :?

Ich habe das erst mal so gelöst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  // ...

  if Encoding = nil then
    Encoding := TEncoding.UTF8;

  // ...

  LogViewMemo.Lines.LoadFromFile(Path, Encoding);


Das löst zwar das Absturzproblem, ist aber recht hässlich.


Delete - Mo 20.02.17 00:58

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Mo 20.02.17 00:59

Ich bin gespannt. Bis morgen!


Delete - Mo 20.02.17 18:26

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Mo 20.02.17 18:32

Das heißt, damit sollte ich mal was anderes als nil bekommen? Da bin ich gespannt. Teste ich frühestens heute Abend. Danke für die Mühe!


Delete - Mo 20.02.17 18:35

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Mo 20.02.17 22:10

Deine Anweisungen sind unvollständig. Kompilieren tut's nämlich so nicht ...

Zitat:
[dcc32 Error] E1026 File not found: 'frDialogIcons.dcr'


Delete - Di 21.02.17 02:37

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Di 21.02.17 10:10

Doch, die ist dabei und wird auch im Projekt angezeigt.


Delete - Di 21.02.17 10:24

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Di 21.02.17 10:30

Dann nehme ich Möglichkeit 3. Aber erst morgen Abend. Will ja die Spannung halten.
Danke.