Unicode und Utf8 mit SynEdit

Rund um die LCL und andere Komponenten
Antworten
Warf
Beiträge: 2149
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Unicode und Utf8 mit SynEdit

Beitrag von Warf »

Hallo Leute,

mal wieder stehe ich vor einem Kleinen Problem, ich nutze in meinem Programm die TSynEdit Komponente, und möchte damit Text bearbeiten, den Text bekomme ich als Byte Array von einer anderen Klasse. Nun aber zu dem Problem, manche Texte sind Unicode Texte, manche sind UTF8 Texte, das große Problem ist jetzt, ich weiß nicht welche Datei welches Format hält. Und TSynEdit kann Unicode nicht Darstellen (oder ich habe die Option noch nicht gefunden), die UTF8 Dateien werden normal dargestellt, die Unicode Dateien wird mir das erste Zeichen Dargestellt, der Rest der Datei scheint leer.

Die Unicode Zeichen sind mir recht herzlich egal, es handelt sich dabei um Asiatische Quelltext Dateien mit Unicode Kommentaren, wenn dort statt den Zeichen einfach ein ? stehen würde wäre das für mich kein Problem.

Nun würde ich gerne Fragen, ist es möglich irgendwie rauszufinden ob die Daten im Byte Array Unicode oder dass das TSynEdit selbst die Umwandlung intern macht?

martin_frb
Beiträge: 588
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Unicode und Utf8 mit SynEdit

Beitrag von martin_frb »

UTF8 (Unicode Transformation Format 8) ist auch Unicode.
Ich nehme mal an mit "Unicode" meinst Du utf16?

FPC hat Proceduren um die beiden Formate umzuwandeln. SynEdit erwartet utf8, also muss die Umwandlung vorher erfolgen.

Zum testen, wenn der Text 0 Bytes enthält ist es nicht utf8. in utf 16 ist ein "a" nicht $41 sondern $0041 (2 Bytes) und afaik Little/BigEndian kann die Reihenfolge der beiden Bytes beeinflussen.

Außerdem gibt es ein Funktion (oder ähnlich) FindFirstInvalidUtf8Char. Auch hier, wird eins gefunden, ist der Text vermutlich nicht utf8.

Und teste und entferne den UTF BOM http://en.wikipedia.org/wiki/Byte_order_mark

Keine Ahnung ob du auch ANSI mit verschiedenen Codepages bekommst, oder utf32....

Benutzeravatar
Ally
Beiträge: 284
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Unicode und Utf8 mit SynEdit

Beitrag von Ally »

Hallo Warf

GuessEncoding liefert die Kodierung von Texten recht zuverlässig und mit ConvertEncoding kann man sie dann auch leicht ändern.

etwa so:

Code: Alles auswählen

Kodierung := GuessEncoding(TxtFenster.Lines.Text);
// von der vorhandenen Kodierung nach UTF8 umkodieren
TxtFenster.Lines.Text := ConvertEncoding(TxtFenster.Lines.Text, Kodierung, 'UTF-8');

Warf
Beiträge: 2149
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Unicode und Utf8 mit SynEdit

Beitrag von Warf »

Vielen Dank leute habe genau sowas wie das BOM gesucht

Antworten