Falsche Kodierung von eingefügtem Text im SynEdit

Rund um die LCL und andere Komponenten
ArchChem
Beiträge: 74
Registriert: Mo 11. Jul 2022, 10:41

Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von ArchChem »

Hallo,

wenn ich von einem anderen Programm (zum Beispiel dem Webbrowser) Text mittels STRG+V in ein SynEdit einfüge, werden die Nicht-ASCII-Zeichen (Umlaute, chinesische Schriftzeichen, etc.) falsch dargestellt.
Das Problem tritt nicht bei anderen Texteingabe-Komponenten auf und auch nicht, wenn direkt ins SynEdit geschrieben (Text eingegeben) wird.

Weiß jemand vielleicht eine Lösung, bei der der eingefügte Text so modifiziert werden kann, dass die Umlaute richtig dargestellt werden?

Anbei noch ein Screenshot:
Screenshot_20230723_213008.png
Screenshot_20230723_213008.png (32.34 KiB) 723 mal betrachtet
Vielen Dank schon mal!

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 155
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von Jorg3000 »

Moin!
Bei mir unter Windows habe ich das Problem nicht, hier werden Umlaute richtig ins SynEdit eingefügt.
Welches System nutzt du?

ArchChem
Beiträge: 74
Registriert: Mo 11. Jul 2022, 10:41

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von ArchChem »

Guten Morgen,

ich benutze Arch Linux und KDE (Wayland).

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von theo »

Ich habe das Problem hier nicht.

Lazarus 2.3.0
Betriebssystem: openSUSE Leap 15.5
KDE-Plasma-Version: 5.27.4
Grafik-Plattform: X11

ArchChem
Beiträge: 74
Registriert: Mo 11. Jul 2022, 10:41

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von ArchChem »

Alles klar, danke euch für die Rückmeldung. Dann scheint es ein Wayland-spezifisches Problem zu sein...

Was könnte man denn tun, um in diesem Fall die betreffenden Zeichen zu ersetzen?

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von theo »

ArchChem hat geschrieben:
Mo 24. Jul 2023, 10:07
Was könnte man denn tun, um in diesem Fall die betreffenden Zeichen zu ersetzen?
Ich würde mal damit anfangen, herauszufinden was überhaupt im Clipboard liegt.
In Anlehnung daran: https://wiki.lazarus.freepascal.org/Cli ... d_contents

Code: Alles auswählen

uses ...LCLType, Clipbrd;

procedure TForm1.CheckClipboard();
var
  I: integer;
  List: TStringList;
begin
  Memo1.Clear;
  List := TStringList.Create;
  try
    ClipBoard.SupportedFormats(List);
    for i := 0 to List.Count - 1 do
      Memo1.Append(List.Strings[i]);
  finally
    List.Free;
  end;
end;    
Ergibt bei mir eine Liste wie:
TIMESTAMP
TARGETS
MULTIPLE
text/plain
Application/X-Laz-SynEdit-Tagged
COMPOUND_TEXT
STRING
TEXT
UTF8_STRING
Wenn du dem Link oben folgst, kannst du die Textinhalte mal anschauen.

Jokra
Beiträge: 3
Registriert: So 17. Apr 2022, 16:23
OS, Lazarus, FPC: Win10, WinXP (Lazarus 2.2.0)
CPU-Target: 64 Bit, (32 Bit)
Wohnort: 30952 Ronnenberg

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von Jokra »

Ich kann hier nicht helfen, sondern suche selbst Hilfe in einem ähnlichen Problem. Als uralter (ab ca 1980) Delphi-, Dos- und Windows-User waren mir Codepage-Probleme bisher unbekannt - bis vor kurzem plötzlich ein sonst einwandfrei laufendes Lazarus-Programm beim Versuch, ein File mit einem Umlaut im Nemen zu laden, nichts mehr ging. Möglich, dass ich unabsichtlich auf einen falschen Button gedrückt hatte. Jedenfalls meine ich, dass das Problem erst seit kurzem akut ist. Selbst ShowMessage- und MessageDlg-Texte im Source wurden automatisch vermurkst. Mit den diversen Empfehlungen in den Lazarus- und FreePascal-Tutorials hatte ich keinen Erfolg. Man kann zwar leicht UTF8-Strings deklarieren, aber den Weg zurück zur Win-Default-CP (8859 od 8895 ?) habe ich noch nicht gefunden. Danke für evtl. Ratschläge!

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von theo »

@Jokra: Dein Beitrag hat keinen direkten Zusammenhang mit diesem Clipboard Problem.
Wenn es dir wichtig ist, dann mach doch bitte einen neuen Thread auf mit einer genaueren Beschreibung des Problems.
Unter Hinweisen wie "bis vor kurzem" kann man sich nicht viel vorstellen. Eine Versionsangabe wäre besser (alt->neu) etc.
"Mit den diversen Empfehlungen in den Lazarus- und FreePascal-Tutorials hatte ich keinen Erfolg" hilft beim Helfen auch nicht weiter. :wink:

Mathias
Beiträge: 5933
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von Mathias »

Ich würde mal damit anfangen, herauszufinden was überhaupt im Clipboard liegt.
In Anlehnung daran: https://wiki.lazarus.freepascal.org/Cli ... d_contents
Ich habe da kürzlich ein kleines Programm geschrieben, welches den Targets-Inhalt des Clipboard auflistet.
Beim drücken von <space> im weissen Fenster, werden dir Targets gelistet. Bim mir kommt das Gleiche wie bei Theo, wen ich in Lazarus Ctrl-C drücke.
Anschliessend kann man die eingeklammerte Nummer drücken und dann werden einige Inhalte ausgegeben, bevorzugt, alles was Text ist.
Dabei ist die Ausgabe zT. recht spannend, je nachdem ich in welcher Anwendung kopieren drücke. Die Umlaute werden nicht überall gleich interpretiert.

Das Programm läuft nur unter Linux.
Dateianhänge
05_-_Show_Targets.zip
(5.14 KiB) 22-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

ArchChem
Beiträge: 74
Registriert: Mo 11. Jul 2022, 10:41

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von ArchChem »

Hallo,

vielen Dank für eure Antworten und Lösungsvorschläge! Ich werde das morgen ausführlich testen und dann Rückmeldung geben (hatte es heute leider zeitlich nicht geschafft). Es scheint mir jetzt aber so, dass hier ein Problem vorliegt, welches auf Lazarus+Qt5+KDE+Wayland beschränkt ist...

Also Danke nochmal und bis morgen :D

ArchChem
Beiträge: 74
Registriert: Mo 11. Jul 2022, 10:41

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von ArchChem »

Nochmals hallo allerseits,
theo hat geschrieben:
Mo 24. Jul 2023, 10:53
Ich würde mal damit anfangen, herauszufinden was überhaupt im Clipboard liegt.
In Anlehnung daran: https://wiki.lazarus.freepascal.org/Cli ... d_contents
Vielen Dank für den Vorschlag. Für einen aus dem Firefox heraus kopierten Text mit Umlauten erhalte ich folgendes:
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
text/html
text/_moz_htmlcontext
text/_moz_htmlinfo
text/plain;charset=utf-8
COMPOUND_TEXT
text/plain
STRING
text/plain;charset=utf-8
text/plain
text/x-moz-url-priv
Bzw. die Implementierung auf der Wiki-Seite zeigt folgendes an:
[ Ich w?rde mal damit anfangen, herauszufinden was ?berhaupt im Clipboard liegt.]
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
text/html
text/_moz_htmlcontext
text/_moz_htmlinfo
text/plain;charset=utf-8
COMPOUND_TEXT
text/plain

text/plain
Ich w?rde mal damit anfangen, herauszufinden was ?berhaupt im Clipboard liegt.
STRING
text/plain;charset=utf-8
text/plain

text/plain
Ich w?rde mal damit anfangen, herauszufinden was ?berhaupt im Clipboard liegt.
text/x-moz-url-priv
<- also auch hier wird bei allen drei Varianten der Umlaut falsch dargestellt. Wenn ich den Text aber direkt in das Memo (nicht SynEdit) einfüge, ist er korrekt dargestellt.
Mathias hat geschrieben:
Mo 24. Jul 2023, 19:10
Ich habe da kürzlich ein kleines Programm geschrieben, welches den Targets-Inhalt des Clipboard auflistet.
Beim drücken von <space> im weissen Fenster, werden dir Targets gelistet. Bim mir kommt das Gleiche wie bei Theo, wen ich in Lazarus Ctrl-C drücke.
Vielen Dank für den Programmvorschlag! Ich habe es ausprobiert, leider ergibt bei mir die Leertaste keine Reaktion, das Fenster bleibt weiß...

Viele Grüße!

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von theo »

Ist wohl wirklich ein Wayland Problem.
Das Memo ist ein gekapseltes Qt oder GTK Control, das macht das quasi "ohne" Lazarus.
Ich würde einen Bugreport machen. Anscheinend betrifft es das Lazarus Clipboard allgemein, nicht nur Synedit.

ArchChem
Beiträge: 74
Registriert: Mo 11. Jul 2022, 10:41

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von ArchChem »

Alles klar, dann werde ich das so machen.

Gibt es denn unabhängig davon irgendeinen Workaround, mit dem man in diesem Fall die Zwischenablage manipulieren könnte?

Mathias
Beiträge: 5933
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von Mathias »

Vielen Dank für den Programmvorschlag! Ich habe es ausprobiert, leider ergibt bei mir die Leertaste keine Reaktion, das Fenster bleibt weiß...
Die Ausgabe erfolgt auf eine Konsole, mit einem gewöhnlichen WriteLn.
Ist wohl wirklich ein Wayland Problem.
Das Memo ist ein gekapseltes Qt oder GTK Control, das macht das quasi "ohne" Lazarus.
Ich würde einen Bugreport machen. Anscheinend betrifft es das Lazarus Clipboard allgemein, nicht nur Synedit.
Als ich kürzlich Versuche mit dem Clpboard machte, musste ich auch feststellen, das sich Synedit anders verhält alt GTK-Memos.
Besonders wen eine INCR-Übertragung mit sehr grossen Pakete läuft.

In den meisten Programmen, kommen meine Daten an.
Mir bekannte Versager sind SynEdit, netbeans, Thunderbird, VB mit Win10.

Anscheinend kochen alle ihre eigenen Süppchen im Clipboard.

Nachtrag: In Thunderbird ist nach 5min doch noch was angekommen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Falsche Kodierung von eingefügtem Text im SynEdit

Beitrag von theo »

ArchChem hat geschrieben:
Di 25. Jul 2023, 19:21
Alles klar, dann werde ich das so machen.

Gibt es denn unabhängig davon irgendeinen Workaround, mit dem man in diesem Fall die Zwischenablage manipulieren könnte?
Synedit hat ein OnPaste Ereignis. Mit Hilfe der Unit LConvEncoding könntest du verschiedene Umwandlungen ausprobieren.
Z.B.

Code: Alles auswählen

procedure TForm1.SynEdit1Paste(Sender: TObject; var AText: String;
  var AMode: TSynSelectionMode; ALogStartPos: TPoint;
  var AnAction: TSynCopyPasteAction);
begin
  AText:=ISO_8859_1ToUTF8(AText);
end;   
Keine Ahnung ob das hilft.

Antworten