SynEdit und Code-Umwandlung
-
- Beiträge: 97
- Registriert: Sa 20. Jun 2009, 16:00
- OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
- CPU-Target: 64Bit
SynEdit und Code-Umwandlung
Lazarus 1.8.4 auf Win10
Wenn ich das richtig verstanden haben, kodiert ein SynEdit per Voreinstellung in UTF8?
Ich habe einige Texte codiert in ISO 8859-1 (lt. Notepad++)
Wenn ich einen solchen Text in ein SynEdit lade, werden die deutschen Umlaute und einige Sonderzeichen wegen UTF8 falsch angezeigt.
Vermutlich wegen Verständnislücken bleiben trotz Doc-Studien die Fragen:
Wie kann man SynEdit so umschalten, dass ISO 8859-1 richtig angezeigt wird? Gibt es da eine Eigenschaft?
Durch welchen Aufruf kann ich den in SynEdit.Text geladenen Text in UTF8 umcodieren?
Meine "müden" Versuche mit
uses LConvEncoding;
Merke:=SE.Text; ConvertEncodingToUTF8(Merke,'cp1252',Encoded); SE.Text:=Merke;
sind gescheitert.
Danke für eine "Nachhilfeeinheit".
Wenn ich das richtig verstanden haben, kodiert ein SynEdit per Voreinstellung in UTF8?
Ich habe einige Texte codiert in ISO 8859-1 (lt. Notepad++)
Wenn ich einen solchen Text in ein SynEdit lade, werden die deutschen Umlaute und einige Sonderzeichen wegen UTF8 falsch angezeigt.
Vermutlich wegen Verständnislücken bleiben trotz Doc-Studien die Fragen:
Wie kann man SynEdit so umschalten, dass ISO 8859-1 richtig angezeigt wird? Gibt es da eine Eigenschaft?
Durch welchen Aufruf kann ich den in SynEdit.Text geladenen Text in UTF8 umcodieren?
Meine "müden" Versuche mit
uses LConvEncoding;
Merke:=SE.Text; ConvertEncodingToUTF8(Merke,'cp1252',Encoded); SE.Text:=Merke;
sind gescheitert.
Danke für eine "Nachhilfeeinheit".
Re: SynEdit und Code-Umwandlung
ConvertEncoding ist eine Funktion, der konvertierte String steht im Result, und das wirfst du weg...
Ganz optimal ist das aber auch nicht, denn die Erzeugung von SE.Text kostet einen Haufen Zeit, und das Schreiben ins SynEdit hat wahrscheinlich auch eine Menge Zusatzoperationen. Ich würde eher die ISO 8859-1 Datei in einen Hilfs-String einlesen und diesen in the ConvertEncoding-Routine stecken, deren Ergebnis ins SynEdit übergeben wird. Außerdem sehe ich noch, dass CP1252 nicht dasselbe ist wie ISO 8859-1:
Code: Alles auswählen
Merke:=SE.Text;
SE.Text := ConvertEncodingToUTF8(Merke,'cp1252',Encoded);
Code: Alles auswählen
var
s: String;
begin
... // Datei in s einlesen...
SE.Text := ISO_8859_1ToUTF8(s);
// dasselbe wie ConvertEncoding, nur muss man nicht nachsehen, wie genau die Eingangs- und Ausgangsencodings geschrieben werden
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: SynEdit und Code-Umwandlung
Ich gehe davon aus, dass man in SynEdit einfach die Codierung einstellen kann. Es gibt extrem viele Optionen....
Mich würde es wundern, wenn das nicht gehen würde....
Mich würde es wundern, wenn das nicht gehen würde....
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 97
- Registriert: Sa 20. Jun 2009, 16:00
- OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
- CPU-Target: 64Bit
Re: SynEdit und Code-Umwandlung
Was es doch alles für schöne Prozeduren gibt...wp_xyz hat geschrieben:SE.Text := ISO_8859_1ToUTF8(s);
Welche Unit muss ich dafür unter uses einbinden?
Und gibt es dafür eine kurze Übersicht/Erläuterung?
Ja... z.B. danach hatte ich schon mehrfach gesucht und nichts gefunden.pluto hat geschrieben: in SynEdit einfach die Codierung einstellen kann. Es gibt extrem viele Optionen....
Vielen Dank erstmal.
- Ally
- Beiträge: 278
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: SynEdit und Code-Umwandlung
Folgendes funktioniert ganz gut.
GuessEncoding ist zwar nicht ganz perfekt, rät in den meisten Fällen aber richtig.
Gruß Roland
GuessEncoding ist zwar nicht ganz perfekt, rät in den meisten Fällen aber richtig.
Gruß Roland
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, SynEdit, SynEditTypes, SynEditMouseCmds, SynEditKeyCmds, LConvEncoding;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
OpenDialog: TOpenDialog;
SynEdit1: TSynEdit;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
SL: TStringList;
begin
OpenDialog.Filter := 'Alle Dateien|*.*|Textdateien (*.txt)|*.txt';
if OpenDialog.Execute then
begin
if FileExists(OpenDialog.FileName) then
begin
SL := TStringList.Create;
try
SL.LoadFromFile(OpenDialog.FileName);
SL.Text := ConvertEncoding(SL.Text, GuessEncoding(SL.Text), EncodingUTF8);
SynEdit1.Lines.Text := Sl.Text;
finally
SL.Free;
end;
end;
end;
end;
end.
Re: SynEdit und Code-Umwandlung
Mit gedrückter CTRL-Taste auf dem Wort IS_8859_1ToUtf8 im Quelltext-Editor klicken, dann öffnet sich die Unit, in der das deklariert ist: lconvencoding. Und wenn du durch den Quelltext im Interface-Teil scrollst siehst du auch, was es sonst noch gibt.lzuser hat geschrieben:Was es doch alles für schöne Prozeduren gibt...wp_xyz hat geschrieben:SE.Text := ISO_8859_1ToUTF8(s);
Welche Unit muss ich dafür unter uses einbinden?
Und gibt es dafür eine kurze Übersicht/Erläuterung?
Es gibt zwar ein "UseUTF8" (public, also nicht im Object-Inspector), aber da ich die Gegenvariable über die Ausgangscodierung nicht finde, nehme ich an, das ist für etwas anderes als die Umcodierung des Texts. Und Martin hat in http://www.lazarusforum.de/viewtopic.php?f=18&t=8728 auch geschrieben: "SynEdit erwartet utf8, also muss die Umwandlung vorher erfolgen".pluto hat geschrieben: in SynEdit einfach die Codierung einstellen kann. Es gibt extrem viele Optionen....
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: SynEdit und Code-Umwandlung
Außerdem ist es nur ReadOnly...Es gibt zwar ein "UseUTF8" (public, also nicht im Object-Inspector),
Stimmt... ich hatte ein anders Projekt im "Kopf"... ich glaube das war noch die Delphi Version(Die ich 2006 zu letzt gesehen hatte)
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 586
- 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: SynEdit und Code-Umwandlung
SynEdit unterztuetzt nur Utf8. Keine Optionen.
Die original Version (und ggf Delphi) sind afaik Utf16.
Die original Version (und ggf Delphi) sind afaik Utf16.