Einzelnen Beitrag anzeigen

knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Delphi und Linux - Encoding-Salat?

  Alt 9. Aug 2019, 15:34
naja, Default meint hier nicht (oder sagen wir "sollte nicht meinen") das Betriebssystem-Default, sondern einfach einen Notfallwert, wenn kein BOM vorhanden ist. (BOMs sind bei UTF8 ja Standard)

ich schätze, mit genau der Überlegung kam es zu der Entscheidung, UTF-8 als Fallback zu setzen. Aber sinnvoll ist es eher nicht, würde ich sagen.

1. es ist hart kodiert. (siehe class function TEncoding.GetDefault: TEncoding; in System.SysUtils.pas)

2. die Procedure TEncoding.GetBufferEncoding (System.SysUtils.pas Zeile 32708) prüft zunächst, ob die Kodierung UTF-8, Unicode LE oder Unicode BE ist. Trifft alles NICHT zu, wird der FEST KODIERTE Wert UTF-8 zurückgegeben, OBWOHL direkt vorher festgestellt wurde, dass es UTF-8 NICHT sein kann.

3. Das führt dazu, dass unter Linux keine ANSI-Dateien in Strings geladen werden können. Sobald du das versuchst, versucht Delphi einen UTF8-String einzulesen, obwohl ein ANSI-String kommt. Das führt bei Umlauten und vielen anderen Sonderzeichen zum Abbruch mit der Meldung "No mapping for the Unicode character exists in the target multi-byte code page". Kein Wunder -> es ist ja auch kein Unicode-Character sondern ein ANSI-Character, der zu verarbeiten wäre.

Also für mich ist das ein Bug. Ich habe inzwischen einen funktionierenden Workaround und kann jetzt einfach meine ANSI-kodierten XML-Dateien unter Linux öffnen. Fehlerfrei. Alle Sonderzeichen werden korrekt dargestellt.
Wolfgang

Geändert von knaeuel ( 9. Aug 2019 um 15:58 Uhr)
  Mit Zitat antworten Zitat