AGB  ·  Datenschutz  ·  Impressum  







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

Ascii oder Ansi

Ein Thema von egal · begonnen am 8. Jun 2006 · letzter Beitrag vom 9. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
egal

Registriert seit: 14. Jul 2004
189 Beiträge
 
Delphi 2006 Professional
 
#1

Ascii oder Ansi

  Alt 8. Jun 2006, 16:17
Wie kann man erkennen, ob eine Textdatei in Ansi oder Ascii gespeichert ist?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Ascii oder Ansi

  Alt 8. Jun 2006, 16:21
Zitat von egal:
Wie kann man erkennen, ob eine Textdatei in Ansi oder Ascii gespeichert ist?
Gar nicht!!
Man könnte untersuchen, ob die Datei häufig die Ansi-Zeichen äöüÄÖÜß enthält und dann darauf schliesen, dass es wohl der Ansi Zeichensatz ISO 8859-1 sein könnte, das ist aber keineswegs sicher.
Andreas
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
189 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Ascii oder Ansi

  Alt 8. Jun 2006, 16:31
Zitat von shmia:
Zitat von egal:
Wie kann man erkennen, ob eine Textdatei in Ansi oder Ascii gespeichert ist?
Gar nicht!!
Man könnte untersuchen, ob die Datei häufig die Ansi-Zeichen äöüÄÖÜß enthält und dann darauf schliesen, dass es wohl der Ansi Zeichensatz ISO 8859-1 sein könnte, das ist aber keineswegs sicher.
Das ist schlecht. Ich habe eine Ascii-Datei und aus dieser Datei soll ich einige Sätze in eine neue Ascii-Datei speichern und am Ende wird der Text von neuer Datei in die Datenbank übertragen.
Bei der alten Datei umwandele ich Ascii in Ansi und meine Umlaute sind in der DB richtig gespeichert. Aber bei meiner selbsterzeugenen Ascii-Datei klappt es nicht, die Umwandlung hilft nicht, ich kriege meine Umlaute nie wieder.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Ascii oder Ansi

  Alt 8. Jun 2006, 17:01
Hier ist mal eine Hilfsunit, um diese Umwandlung in beide Richtungen zu bewerkstelligen:
http://www.delphipraxis.net/internal...=560752#560752
Jetzt kommt es darauf an, auf welche Art du die Datei einliest und speicherst (TStringList, TFileStream, readln/writeln).
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Ascii oder Ansi

  Alt 8. Jun 2006, 17:51
Wenn du selber für das Speichern der Dateien, oder zumindestens einer der Dateiversionen, verantwortlich bist, dann könntrst du dir ja ein Markerbyte an den Dateianfang setzen, welches dir eine unterscheidung ermöglicht ... so wie es z.B. bei UTF8-, UCS2-/UCS2LE-, UCS2BE- ...-Dateien der Fall ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Ascii oder Ansi

  Alt 9. Jun 2006, 00:06
Keine Ahnung was shmia's Antworten sollen, sie sind jedenfalls falsch. Umlaute sind in keinem Fall ein Teil von ASCII!

ASCII sind alle Zeichencodes von 0..127 womit du auch deine Antwort hast. Prüfe ob ein Zeichen mit Code größer 127 in der Datei enthalten ist. Ob dieses oder jenes drin ist, kann man nicht unterscheiden:
  • ANSI hat 256 Zeichen und ASCII nur 128
  • ANSI und ASCII sind auch kodierungsunabhängig für den ASCII-Bereich, den sie sich teilen, identisch.
  • Nähmen wir mal an du meinst EASCII mit ANSI vergleichen: dann kommt es immer auf die Kodierung an, also darauf wie du es anzeigst (Kodierung ist eine Interpretationssache deines Programms!). Logischerweise haben die Zeichen alle noch Werte zwischen 0..255. Wie willst du die denn unterscheiden? Vielleicht mit OCR um herauszubekommen wie unterschiedliche Programme den jeweiligen Code ziwschen 0..255 anzeigen?
Du siehst, die Kodierung ist absolut deine Implementationssache und nichts was dir hier jemand irgendwie vorschreiben kann oder will. himitsu hat ganz recht mit seiner Empfehlung, entweder speicherst du einen Marker mit, oder du nimmst gleich einen der Unicode-Standards um deine Zeichen zu kodieren und bist dir damit sicher, daß sie von jedem (also auch deinem) Programm eineindeutig interpretiert werden.
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
189 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Ascii oder Ansi

  Alt 9. Jun 2006, 08:22
Zitat von shmia:
Hier ist mal eine Hilfsunit, um diese Umwandlung in beide Richtungen zu bewerkstelligen:
http://www.delphipraxis.net/internal...=560752#560752
Jetzt kommt es darauf an, auf welche Art du die Datei einliest und speicherst (TStringList, TFileStream, readln/writeln).
Wie man umwandelt, das weiß ich, aber trotzdem danke für Link.
Ich arbeite mit readln/writeln, ist es falsch?
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
189 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Ascii oder Ansi

  Alt 9. Jun 2006, 08:28
Zitat von himitsu:
Wenn du selber für das Speichern der Dateien, oder zumindestens einer der Dateiversionen, verantwortlich bist, dann könntrst du dir ja ein Markerbyte an den Dateianfang setzen, welches dir eine unterscheidung ermöglicht ... so wie es z.B. bei UTF8-, UCS2-/UCS2LE-, UCS2BE- ...-Dateien der Fall ist.
Ich könnte was in Dateiinfo schreiben(Titel, Kategorie usw.), aber wie, das weiß ich leider nicht
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
189 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Ascii oder Ansi

  Alt 9. Jun 2006, 08:49
Zitat von Olli:
himitsu hat ganz recht mit seiner Empfehlung, entweder speicherst du einen Marker mit, oder du nimmst gleich einen der Unicode-Standards um deine Zeichen zu kodieren und bist dir damit sicher, daß sie von jedem (also auch deinem) Programm eineindeutig interpretiert werden.
Sieht so aus, dass ich auch Einleseprogramm ändern muss, das wollte ich eigentlich vermeiden, aber egal.
Mich interessiert eigentlich auch, warum werden meine Ascii-Datensätze in die Textdatei nicht richtig gespeichert.
Ich habe zuerst keine Umwandlung gemacht:
Delphi-Quellcode:
 var cZeile: string;
readln(txtFileAlt, cZeile); // txtFileAlt-Ascii-Codierung
writeLn(txtFileNeu,cZeile);
Das hat nicht geholfen, beim Einlesen habe Ascii nach Ansi umgewandelt, aber statt Umlauten war Müll.
Dann habe ich zuerst nach Ansi konvertiert und beim Schreiben wieder nach Ascii:
Delphi-Quellcode:
 var cZeile: string;
readln(txtFileAlt, cZeile); // txtFileAlt-Ascii-Codierung
cZeile := Ascii2Ansi(cZeile); // Ascii -> Ansi
cZeile := Ansi2Ascii(cZeile); // Ansi -> Ascii
writeLn(txtFileNeu,cZeile);
Hat auch nichts gebracht.
Und jetzt die Frage, was mache ich falsch: Readln/Writeln oder vielleicht String-Variable schuld?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

Re: Ascii oder Ansi

  Alt 9. Jun 2006, 10:25
Zitat von egal:
Mich interessiert eigentlich auch, warum werden meine Ascii-Datensätze in die Textdatei nicht richtig gespeichert.
Ich habe zuerst keine Umwandlung gemacht:
Delphi-Quellcode:
 var cZeile: string;
readln(txtFileAlt, cZeile); // txtFileAlt-Ascii-Codierung
writeLn(txtFileNeu,cZeile);
Das hat nicht geholfen, beim Einlesen habe Ascii nach Ansi umgewandelt, aber statt Umlauten war Müll.
Dann habe ich zuerst nach Ansi konvertiert und beim Schreiben wieder nach Ascii:
Delphi-Quellcode:
 var cZeile: string;
readln(txtFileAlt, cZeile); // txtFileAlt-Ascii-Codierung
cZeile := Ascii2Ansi(cZeile); // Ascii -> Ansi
cZeile := Ansi2Ascii(cZeile); // Ansi -> Ascii
writeLn(txtFileNeu,cZeile);
Hat auch nichts gebracht.
Und jetzt die Frage, was mache ich falsch: Readln/Writeln oder vielleicht String-Variable schuld?
Ähem, irgendwie kapiere ich noch immer nicht, wo es hängt. Warum kannst du nicht verstehen, daß in deiner Datei auch für jedes Zeichen 8bit benutzt werden und damit jedes Zeichen einen Wert von 0..255 hat?! ... und daß die Darstellung dieser jeweils 256 unterschiedlichen Entitäten allein dem lesenden Programm obliegt (bzw. beim Lesen und Speichern die "Abbildung" von Code zu darzustellendem Zeichen und umgekehrt).

Nur weil █ (Unicode-Zeichen $2588, EASCII-Zeichen $DB bei westeuropäischer DOS-Kodierung) unter DOS als "voller Block" erscheint, heißt das nicht, daß es unter einer anderen Kodierung (ANSI-westlich $DB == Û) genauso sein muß. Nochmal: nimm Unicodezeichen, wenn du das Erscheinungsbild der Zeichen eineindeutig festlegen willst.

Nebenbei gibt es dir "Bearbeiten"-Funktion für Beiträge, man muß also nicht jedes Mal einen neuen Beitrag verfassen (insbesondere so zeitnah).
  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 07:33 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