AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi 10.4 unter Linux -Unicode Encoding problem

Delphi 10.4 unter Linux -Unicode Encoding problem

Ein Thema von Harry Stahl · begonnen am 7. Jun 2020 · letzter Beitrag vom 7. Jun 2020
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
1.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

Delphi 10.4 unter Linux -Unicode Encoding problem

  Alt 7. Jun 2020, 01:02
Wenn ich ein größeres Projekt unter Linux mit Indy compiliere und starte, erhalte ich

- ETFontGlyManagerException
- EIDConnectionStateError
- EThreadNameException

Unter 10.3.3 war das nicht

Während man das noch einfach ignorieren kann, funktioniert unter 10.4 beim abrufen einer Mail das nicht mehr:

Delphi-Quellcode:
 DMI.IMAP41.RetrieveNoDecodeToStream(StrToInt(GetFieldStr (#1, slGetMail[x], 2)), ts);
 ts.position := 0;
 slHlp.LoadFromStream(ts);
Hier steigt das Programm aus (--> LoadFromStream, --> SetTextStr (Encoding.GetString --> in Zeile 33442 wird dann in der System.SysUtils ein Error geschmissen :

Delphi-Quellcode:
TEncoding.Getstring...

 if (ByteCount > 0) and (Len = 0) then
    raise EEncodingError.CreateRes(@SNoMappingForUnicodeCharacter);
Die Meldung lautet dann "No mapping for the Unicode character exists in the target multibyte code page".

Danach hängt sich das Programm radikal auf, mit Ach und krach kann ich dann noch die Programme runterfahren und die Virtuelle Maschine neu starten (aber selbst bei Linux muss ich mich erst mal ab und neu anmelden).

Wie gesagt, unter 10.3.3 habe ich das Problem nicht. Debuggen gestaltet sich zudem insgesamt sehr hakelig.

Jemand eine Idee, wo das Problem liegen könnte und wie man das beheben kann?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
1.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Delphi 10.4 unter Linux -Unicode Encoding problem

  Alt 7. Jun 2020, 11:56
Ich vermute mal (meine es gab auch mal so eine Diskussion), das man das "Guessing" für Encondings nun evtl. abgeschafft hat (also das raten, welches Encoding der zu lesende Text hat, wenn kein BOM im Text drin ist).

Das war vormals schon so bei TStrings.loadfromfile (Datei, Encoding), wo man nur (oder sagen wir mal einfach) mit Try Except rausfinden konnte, ob ein Text nun Ansi oder UTF8 ist.

Beim Loadfromstream, hatte es (wenn ich mich nicht täusche) aber funktioniert, wegen des noch enthaltenen Guessings?

Wie auch immer, was die genauen Ursachen sind, konnte ich nicht wirklich erkunden, aber wenn ich es jetzt so mache:

Delphi-Quellcode:
 ts.position := 0;

 try
   slHlp.LoadFromStream(ts, TEncoding.UTF8);
 except
   ts.Position := 0;
   slHlp.LoadFromStream(ts, TEncoding.Ansi);
 end;
wird unter

funktioniert es...

Muss jetzt also alle Stellen abchecken, wo ich ein Loadfromstream drin habe und potentiell unklar ist, welches format der einzulesende Text hat...

Interessantwerweise funktioniert unter Windows weiterhin

slHlp.LoadFromStream(ts);

auch, wenn der Stream einen ANSI-Text enthält. Wie es sich unter MACOS stellt, habe ich noch nicht ausprobiert...

Alternativ könnte es auch sein, dass man das DefaultEncoding für Linux geändert hat.

Immer wieder schön, wie man 3-4 Stunden Zeit vertun kann...

Nachtrag: Ja, auch unter MacOS muss ich das anpassen, sonst gibt es eine entsprechende Meldung...

Na ja, unter MAC tröstet mich jetzt aber die Verwendung von Metal, was die Anzeige echt extrem beschleunigt, vor allem auf Retina Monitoren... Insofern lohnt der Umstieg auf 10.4 allemal...

Geändert von Harry Stahl ( 7. Jun 2020 um 12:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.788 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Delphi 10.4 unter Linux -Unicode Encoding problem

  Alt 7. Jun 2020, 13:16
Ich vermute mal (meine es gab auch mal so eine Diskussion), das man das "Guessing" für Encondings nun evtl. abgeschafft hat (also das raten, welches Encoding der zu lesende Text hat, wenn kein BOM im Text drin ist).
Ich kann mich nicht erinnern, daß es so ein Guessing überhaupt gab. Wenn kein BOM vorhanden ist, wird das Default-Encoding genommen. Das war und ist unter Windows ANSI und unter Posix UTF-8 (außer man hat TStrings das DefaultEncoding explizit zugewiesen):
Delphi-Quellcode:
class function TEncoding.GetDefault: TEncoding;
begin
{$IFDEF MSWINDOWS}
  Result := ANSI;
end;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
  Result := UTF8;
end;
{$ENDIF POSIX}
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
1.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Delphi 10.4 unter Linux -Unicode Encoding problem

  Alt 7. Jun 2020, 13:28
Ja, kann sein, dass ich das mit dem Guessing mißverstanden hatte, dass die Aussage eher war, man wolle es nicht einführen (im Zusammenhang mit BOM_Less UTF8-Dateien).

Jedenfalls verhält sich hier 10.4 anders als 10.3.x, warum genau das so ist, weiß ich nicht, aber mit der von mir beschriebenen Vorgehensweise kann man ja zurecht kommen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.672 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Delphi 10.4 unter Linux -Unicode Encoding problem

  Alt 7. Jun 2020, 13:39
Ich vermute mal (meine es gab auch mal so eine Diskussion), das man das "Guessing" für Encondings nun evtl. abgeschafft hat (also das raten, welches Encoding der zu lesende Text hat, wenn kein BOM im Text drin ist).
Ich kann mich nicht erinnern, daß es so ein Guessing überhaupt gab.
Windows Notepad macht sowas.
Evtl. das noch in erinnerung gehabt.
Für Delphi VCL (FMX) wäre mir das neu.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
1.920 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Delphi 10.4 unter Linux -Unicode Encoding problem

  Alt 7. Jun 2020, 15:01
OK, alles zurück auf Anfang:

Habe es noch mal mit alten Versionen gegengecheckt, das Verhalten von 10.3.x und 10.4 ist doch gleich, hatte es schlicht bei den Tests nicht mitbekommen, da ich an einer Stelle eine Exception zuviel verschluckt habe (bei Mail-Empfang mit Indy muss man ja nicht wirklich alles ausgeben, aber so hatte ich bei Empfang von ANSI-Mails [die ja nicht mehr so oft vorkommen] den Encoding-Error nicht mitbekommen...).

Also shame on me, mit 10.4 ist da alles OK... (Gott sei Dank, habe mich schon so dran gewöhnt)

Geändert von Harry Stahl ( 7. Jun 2020 um 16:06 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf