![]() |
Einlesen von KAPUTTER Unicode-Datei
Hallo!
Bein Einlesen einer Datei erhalte ich die Exception "Keine Zuordnung für Unicodezeichen in der Multibyte-Zielcodeseite vorhanden". Beim Durchschauen habe ich festgestellt, es sind in der Datei tatsächlich ALLE Sonderzeichen geschrottet und durch die Zeichenfolge
Code:
(aus ANSI-Sichtweise, alle gleich, egal was es vorher mal war) ersetzt worden. Das ist serverseitig passiert und außerhalb meines Einflussbereiches. Das ist zwar doof, sollte aber nicht dazu führen dass mein Programm beim Einlesen aufgibt. Vielmehr hätte ich gerne, dass nicht dekodierbare Unicode-Zeichen als "?" ausgegeben werden. Kann man das mit wenig Aufwand hier ergänzen oder muss ich die gesamte Datei "zu Fuß" scannen?
�
Delphi-Quellcode:
Das ist auch insofern sehr wichtig, damit nicht dekodierbare Zeichen nicht dazu führen, dass sich Multibyte-Zeichen zu mehreren Singlebyte-Zeichen "vermehren" weil das die Logik durcheinander bringt.
LReader := TStreamReader.Create(AStream, TEncoding.Unicode, True, 2048);
try FZeileNr := 0; while LReader.Peek >= 0 do begin ZeileVerarbeiten(LReader.ReadLine); Inc(FZeileNr); end; finally FreeAndNil(LReader); end; Grüße Cody |
AW: Einlesen von KAPUTTER Unicode-Datei
Du liest ja die Datei als UTF-16LE ein. � ist aber UTF-8. Ist das gewollt?
|
AW: Einlesen von KAPUTTER Unicode-Datei
Wie gesagt, die Datei ist kaputt. Sie hat eine Unicode-Preamble, aber die Sonderzeichen sind vermurkst. Gut möglich, dass das ein Mischmasch aus Unicode und UTF8 ist. Mir geht es aber nur um eine Art Failsafe-Modus. So dass der Anwender 90% lesen kann. Immer noch besser als eine schnöde Fehlermeldung und Ende Gelände.
|
AW: Einlesen von KAPUTTER Unicode-Datei
Du könntest die Datei im Falle des Fehlers nochmals einlesen mit TEncoding.UTF8 als Vorgabe?
Nee, sorry, das war Quatsch, das geht bei einer ANSI-Datei, aber nicht bei fixer Mehr-Byte-Codierung (UNICODE)... |
AW: Einlesen von KAPUTTER Unicode-Datei
Zitat:
Zitat:
|
AW: Einlesen von KAPUTTER Unicode-Datei
Ja, ist mir auch schon aufgefallen... (s.o.) *schäm*
|
AW: Einlesen von KAPUTTER Unicode-Datei
Ich arbeite halt immer nur mit ANSI oder UTF8...
|
AW: Einlesen von KAPUTTER Unicode-Datei
Jepp, so seh ich das auch. Wenn ich die Datei mit Notepad++ öffne, dann werden eben jene defekten Zeichen als ein Platzhalter-Rechteck angezeigt. Genau so würde ich das auch gern machen. Irgendein Platzhalter, der wenigstens die Zeichenlänge reserviert, sodass nachfolgende nicht nach rechts weiter gerückt werden.
|
AW: Einlesen von KAPUTTER Unicode-Datei
In meinem Umfeld und bei meinen Anwendungen kann ich mir nicht vorstellen, dass es Sinn macht, mit dieser kaputten Datei weiterzuarbeiten.
Wenn es sich hier also um einen Einzelfall handelt: Warum sollte das Programm dann nicht mit einem - sauber abgefangenen :-) - Fehler aussteigen? Wenn das öfter vorkommt, müsste man wahrscheinlich doch den langen Weg beschreiten und die Ursache des Fehlers angehen. |
AW: Einlesen von KAPUTTER Unicode-Datei
Hallo,
hm, so viele verschiedene (deutsche) Sonderzeichen gibt es doch eigentlich gar nicht. Kannst du die kaputten Zeichen nicht einfach ersetzen? StringList.LoadFromFile StringReplace StringList.Text Das macht natürlich nur Sinn, wenn die häufiger solche Dateien bekommst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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 by Thomas Breitkreuz