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?
Unicode und Utf8 mit SynEdit
-
- 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
UTF8 (Unicode Transformation Format
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....

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....
- 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
Hallo Warf
GuessEncoding liefert die Kodierung von Texten recht zuverlässig und mit ConvertEncoding kann man sie dann auch leicht ändern.
etwa so:
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');
-
- Beiträge: 2150
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Unicode und Utf8 mit SynEdit
Vielen Dank leute habe genau sowas wie das BOM gesucht