AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EEncodingError Fehler

Ein Thema von greenmile · begonnen am 21. Apr 2014 · letzter Beitrag vom 26. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: EEncodingError Fehler

  Alt 22. Apr 2014, 15:40
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?

Geändert von greenmile (22. Apr 2014 um 15:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

AW: EEncodingError Fehler

  Alt 22. Apr 2014, 16:04
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: EEncodingError Fehler

  Alt 22. Apr 2014, 16:07
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.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#4

AW: EEncodingError Fehler

  Alt 22. Apr 2014, 16:27
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.
Michael Justin

Geändert von mjustin (22. Apr 2014 um 16:30 Uhr)
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: EEncodingError Fehler

  Alt 22. Apr 2014, 16:55
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);
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.558 Beiträge
 
Delphi 12 Athens
 
#6

AW: EEncodingError Fehler

  Alt 22. Apr 2014, 22:47
Was meinst Du mit

TMemIniFile.Create(TempFile,TEncoding.AutoDetect); ?

Meinst Du das ohne Parameterangabe (.AutoDetect gibt es ja so als Bezeichner nicht),

also so:

TMemIniFile.Create(TempFile);

Wie auch immer, ich habe hier mal eine UTF8-Ini-Datei auf dem MAC erzeugt und kann die auch ohne Probleme in allen Varianten einlesen (auch wenn die Umlaute oder ähnliches enthält).

Folge doch einfach mal mit dem Debugger den weiteren Verlauf, dann siehst Du ja genau, wo es kracht und erhältst evtl. einen hilfreichen Hinweis, wo das Problem liegen könnte.

Geändert von Harry Stahl (22. Apr 2014 um 22:55 Uhr)
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: EEncodingError Fehler

  Alt 23. Apr 2014, 07:55
Ich schicke Dir die Datei per PN, sobald ich dazu komme.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: EEncodingError Fehler

  Alt 23. Apr 2014, 08:57
In XE6 hat sich viel am TEncoding getan. In Anbetracht bisheriger Erfahrungen vermute ich, dass unsere amerikanischen Freunde mal wieder eine Standard-Codepage im Constructor verwendet haben. Kannst Du einen reproduzierbaren Code posten, bspw. mit zwei Buttons zum Speichern / Laden einer Ini, mit der das unter XE6 nachvollziehbar ist? Interessant wäre auch die sw_vers des Mac sowie die sonstige Konfiguration.
Und was gibt file für die Datei aus (z.b. ASCII)?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#9

AW: EEncodingError Fehler

  Alt 23. Apr 2014, 09:16

TMemIniFile.Create(TempFile,TEncoding.AutoDetect); ?
Denke nicht das es Autodetect gibt, da es für Windows 1252 Zeichensatz kein BOM gibt. Wenn es also eine Datei mit der Codepage 1252 ist, dann stehen die deutschen Umlaute wie z.B. ö mit dem Hexwert $F6 in der Datei. In einer UTF8 codierten Datei steht das ö als zwei Byte $C3 $B6 drin.

Wenn man auf Mac Seite einen String von Codepage 1252 in UTF8 konvertiert möchste, müßte man die
Datei so öffen:
TMemIniFile.Create(TempFile,TEncoding.GetEncoding(1252)); Aber ich denke nicht das das MacOS alle Codepages und deren Konvertierung von und zu UTF8 kennt.
Entweder man sorgt dafür, dass die Datei bereits in UTF8 vorliegt oder man liesst die Datei in TBytes und konvertiert die deutschen Umlaute selbst ins UTF8.

Vielleicht so:
Delphi-Quellcode:
for i:=Low(DateiInBytes) to High(DateiInBytes) do
  case DateiInBytes[i] of
    $F6 : Result := Result + 'ö';

...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#10

AW: EEncodingError Fehler

  Alt 23. Apr 2014, 11:52
Zitat:
Denke nicht das es Autodetect gibt, da es für Windows 1252 Zeichensatz kein BOM gibt
Es gibt für alle ANSI kein BOM.

Das bekannte BOM ist im Prinzip nur ein Unicode-Zeichen #$FFFE (eventuell war es auch #$FEFF ... vergess das immer), welches mit dem Text kodiert wurde.
(Das Zeichen #$FFFE als UTF-8 kodiert, ergibt die bekannten 3 Byte des UTF-8-BOM)

Alle Zeichensätze, die kein Unicode darstellen können, können also dieses BOM nicht besitzen.
Da würde dann maximal ein "?", oder welches Ersatzzeichen bei der Umwandlung von Unicode verwendet wurde, dort stehen.

(Drum find ich es im Windows besser, wenn dort ohne BOM der Standard die lokale ANSI-Codepage ist, da es für UTF-8 ein BOM gibt)

Die einzige und unsichere Lösung wäre also, wenn man den Text analysiert, bzw. erst nach dem BOM sieht und das verwendet, oder versucht es als UTF-8 zu laden und wenn das knallt, es dann als ANSI zu behandeln.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz