AGB  ·  Datenschutz  ·  Impressum  







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

Einlesen von KAPUTTER Unicode-Datei

Ein Thema von Codehunter · begonnen am 5. Feb 2019 · letzter Beitrag vom 6. Feb 2019
Antwort Antwort
Seite 2 von 3     12 3      
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.054 Beiträge
 
Delphi 2009 Professional
 
#11

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 15:36
Jepp, so seh ich das auch. Wenn ich die Datei mit Notepad++ öffne, dann werden eben jene defekten Zeichen als ein Platzhalter-Rechteck angezeigt.
Das kann aber nicht sein. Bei UTF-16 besteht jedes Zeichen aus 2 oder 4 Bytes, deine ANSI-Fehlersequenz (sie bedeutet das Platzhalterzeichen �) hat aber 3 Bytes, sprich der Editor würde danach falsche Bytes zu einem Zeichen zusammenfassen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.446 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 15:52
hm, so viele verschiedene (deutsche) Sonderzeichen gibt es doch eigentlich gar nicht.
Es geht sicher nicht nur um deutsche Sonderzeichen. Da gibt es tausende.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#13

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 15:53
Ich bin mir gar nicht mehr sicher, ob es sich wirklich um eine UTF-16 codierte Datei handelt. Im TStreamReader.Create wird zwar ein TEncoding.Unicode übergeben, aber für das DetectBOM wiederum ein True. Damit wird das Unicode-Encoding lediglich zum Fallback, wenn kein BOM gefunden wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
379 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 15:54
Kannst du die kaputten Zeichen nicht einfach ersetzen?
Wenn alle falschen Zeichen mit der zeichenfolge
Zitat:
�
ersetzt wurden, macht das nicht viel Sinn.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 15:57
Hallo,
Zitat:
Bein Einlesen einer Datei erhalte ich die Exception
Es steht nicht, einer beliebigen Datei ...
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 16:12
Das Problem ist, ich weiß ja nicht welche Zeichen kaputt sind. Bei dieser Datei schon, aber es könnte auch eine beliebig andere kaputte Datei geladen werden. Dort liegen wieder andere Kodierfehler vor. Also einfach Suchen und Ersetzen ist nicht.

Aber wenn ich so in die Quellen von TEncoding schaue dann wird für solche Zeichen tatsächlich nichts anderes gemacht als ein RAISE und fertig. Um das zu ändern müsste ich wohl ein komplett eigenes TEncoding schreiben, weil die Methode TEncoding.GetString (wo das RAISE passiert) nicht virtuell ist. Ich glaub da stehen Aufwand und Nutzen in keinem Verhältnis.

EDIT:
Ich bin mir gar nicht mehr sicher, ob es sich wirklich um eine UTF-16 codierte Datei handelt. Im TStreamReader.Create wird zwar ein TEncoding.Unicode übergeben, aber für das DetectBOM wiederum ein True. Damit wird das Unicode-Encoding lediglich zum Fallback, wenn kein BOM gefunden wird.
Genau so ist das auch beabsichtigt. Ich wollte damit erreichen, dass die Preamble (BOM ist ja eigentlich nur ein Teil dessen) ausgewertet wird. Erst wenn das komplett vor die Wand geht, gebe ich Unicode fest vor. Bei der besagten Datei kann aber auch Notepad++ die kaputten Zeichen nicht retten, egal wie man an der Kodierung dreht. Insofern betrachte ich die Preamble als korrekt und den Inhalt als defekt. Die Datei kommt mit einer Unicode-Preamble. Aber auch anders herum, wenn ich hardcoded UTF8 als Reader-Encoding vorgebe und die Preamble ignoriere, laufe ich in genau die selbe Exception.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter ( 5. Feb 2019 um 16:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#17

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 16:27
Die Datei kommt mit einer Unicode-Preamble.
Dann dürfte das GetString aber eigentlich nicht krachen, denn GetCharCount liefert bei TUnicodeEncoding lediglich ByteCount div SizeOf(Char) und GetChars macht ein simples Move.

Was sagt denn der Debugger dazu?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.054 Beiträge
 
Delphi 2009 Professional
 
#18

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 5. Feb 2019, 18:37
Dieser Thread hat keinen Sinn mehr ohne dass du hier einen Screenshot aus einem Hex-Editor (HxD z.B., guck mal auf delphipraxis.net) postest. Da reichen auch die ersten zehn Bytes. Damit ist der Thread sofort, eindeutig und vollumfassend erledigt. Ich bin mir, wie ich bereits im ersten Post geschrieben habe, ziemlich sicher, dass das Problem vor dem PC sitzt und nicht weiß, was für ein Encoding die Datei hat. Eine Datei kann wie erwähnt technisch gesehen unmöglich gleichzeitig eine dreiteilige ANSI-Sequenz und UTF-16-Codepoints enthalten, ohne dass ziemlich genau die Hälfte der Datei aus überwiegend CJK-Zeichen bestände.

tatsächlich ALLE Sonderzeichen geschrottet
Wenn keine Sonderzeichen außer der UTF-8-Sequenz drin sind, sehe ich kein Problem damit, diese eine Sequenz einmalig zu ersetzen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.446 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 6. Feb 2019, 07:55
Was meinst du mit "dreiteilige ANSI-Sequenz"? Und was meint ihr mit "Sonderzeichen"? Der Begriff kommt wenn ich danach Google bei Unicode nicht vor. Auch bei den Kategorien nicht (https://www.compart.com/de/unicode/category).
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Einlesen von KAPUTTER Unicode-Datei

  Alt 6. Feb 2019, 09:23
Ich würde es etwas anders formulieren, aber Redeemer hat recht. Ohne einen Hexdump ist das alles nur Spökenkiekerei. Jede Datei enthält binäre Daten. Wenn Ihre Anzeige einen sinnvollen Text ergibt, dann stimmt die Interpretation (zufällig?).

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:57 Uhr.
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