Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   EEncodingError Fehler (https://www.delphipraxis.net/180079-eencodingerror-fehler.html)

greenmile 21. Apr 2014 19:53

EEncodingError Fehler
 
Hallo,

ich möchte auf dem Mac eine INI mittels TMemIniFile einlesen. Unter XE4 habe ich das immer mit "TMemIniFile.Create(Datei,TEncoding.UTF8)" gemacht, unter XE6 bekomme ich jedesmal die Exception "Im Projekt xxx ist eine Exception der Klasse EEncodingError mit der Meldung 'Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden' aufgetreten.". Habe es auch schon mit "TIniFile" versucht, selbiges Problem. Was bedeutet die Meldung? Was ist zu tun? Weiß das jemand?

Betrifft: Firemonkey Mac.

Harry Stahl 21. Apr 2014 21:22

AW: EEncodingError Fehler
 
Also z.B. meine (normalen) Ini-Files zum Speichern und Wiederherstellen der Formpositionen funktionieren:

Delphi-Quellcode:
ini := TIniFile.Create(AppIniName);
Hast Du ein konkretes Beispiel, das man nachvollziehen kann?

Bambini 22. Apr 2014 11:44

AW: EEncodingError Fehler
 
Zitat:

Zitat von greenmile (Beitrag 1256400)
Was bedeutet die Meldung? Was ist zu tun? Weiß das jemand?

Betrifft: Firemonkey Mac.

Die Meldung deutet darauf hin, dass die INI Datei Zeichen enthält,
dies es im Zielzeichensatz (MacOS = UTF8) nicht gibt. wenn z.B. deine INI Datei deutsche Umlaute (öäüÖÄÜß) enthält, die nicht UTF8 codiert sind.

Ronald

greenmile 22. Apr 2014 11:45

AW: EEncodingError Fehler
 
Hmmm, das kein durchaus sein, aber unter XE4 lief es. Gibt es da einen Aufrufparameter in .Create, womit er es "Egal wie, Hauptsache laden" erledigt?

mjustin 22. Apr 2014 11:55

AW: EEncodingError Fehler
 
Zitat:

Zitat von greenmile (Beitrag 1256400)
ich möchte auf dem Mac eine INI mittels TMemIniFile einlesen. Unter XE4 habe ich das immer mit "TMemIniFile.Create(Datei,TEncoding.UTF8)" gemacht

Erfolgen alle Zugriffe nur über Delphi mit vorhergehendem TMemIniFile.Create(Datei,TEncoding.UTF8)?

Wurde die Datei eventuell mit einem Editor manuell bearbeitet, der ein anderes Encoding verwendet?

Das Default Encoding auf OSX ist zwar UTF-8, aber Texteditoren "können auch anders" ;)

greenmile 22. Apr 2014 15:40

AW: EEncodingError Fehler
 
Die Datei lade ich direkt aus dem Internet, die kommt also immer Frisch auf den Tisch :)
Die Datei wird mit Indy mittels GET direkt in einen Stream geschrieben und ja, ich lese Sie nur mit TMemIni ein. Wieso greift da irgendein Encoding-Gedöns?

himitsu 22. Apr 2014 16:04

AW: EEncodingError Fehler
 
Und in Windows ist es standardmäßig ANSI (wie bekommt man im iOS/OSX raus, ob eine Datei ANSI ist, wenn es für ANSI doch kein BOM gibt)

Und ja, Encoding (Umkodierung) brauchst du fast immer, außer
wenn das Format der Datei dem Format der Stringauswertung entspricht.

Und die INI ist vermutlich nicht als Unicode gespeichert.

greenmile 22. Apr 2014 16:07

AW: EEncodingError Fehler
 
Nochmal: Ich lade die Datei mittels IndyHTTP.GET aus dem Netz, es handelt sich halt nur um eine INI Datei. In XE4 geht es einwandfrei, also das einlesen. In XE6 plötzlich nicht mehr. Jetzt kann ich die Quelle natürlich schlecht ändern, weil sonst meine XE4 Anwendungen nicht mehr laufen, also muss ich XE6 irgendwie überreden.

mjustin 22. Apr 2014 16:27

AW: EEncodingError Fehler
 
Zitat:

Zitat von greenmile (Beitrag 1256539)
Die Datei lade ich direkt aus dem Internet

Wie sieht denn der Code zum laden aus dem Internet aus?
Encoding ist immer relevant, wenn man mit mehr als einem Rechner zu tun hat: es kann zu Encoding-Problemen zwischen der auf dem Server liegenden Datei und dem Server, und Encoding-Problemen zwischen dem Server und dem Client kommen.

greenmile 22. Apr 2014 16:55

AW: EEncodingError Fehler
 
Also, ich habe mir die Datei mal mit Notepad++ angeschaut, sie scheint eine UTF8 Datei zu sein, ich kann auch alles darin lesen.
Wenn ich die Datei allerdings mit "TMemIniFile.Create(TempFile,TEncoding.UTF8);" öffne, kommt die Exception.
Genau wie bei TMemIniFile.Create(TempFile,TEncoding.AutoDetect);


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz