Ascii oder Ansi
Wie kann man erkennen, ob eine Textdatei in Ansi oder Ascii gespeichert ist?
|
Re: Ascii oder Ansi
Zitat:
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. |
Re: Ascii oder Ansi
Zitat:
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. |
Re: Ascii oder Ansi
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). |
Re: Ascii oder Ansi
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.
|
Re: Ascii oder Ansi
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:
|
Re: Ascii oder Ansi
Zitat:
Ich arbeite mit readln/writeln, ist es falsch? |
Re: Ascii oder Ansi
Zitat:
|
Re: Ascii oder Ansi
Zitat:
Mich interessiert eigentlich auch, warum werden meine Ascii-Datensätze in die Textdatei nicht richtig gespeichert. Ich habe zuerst keine Umwandlung gemacht:
Delphi-Quellcode:
Das hat nicht geholfen, beim Einlesen habe Ascii nach Ansi umgewandelt, aber statt Umlauten war Müll.
var cZeile: string;
readln(txtFileAlt, cZeile); // txtFileAlt-Ascii-Codierung writeLn(txtFileNeu,cZeile); Dann habe ich zuerst nach Ansi konvertiert und beim Schreiben wieder nach Ascii:
Delphi-Quellcode:
Hat auch nichts gebracht.
var cZeile: string;
readln(txtFileAlt, cZeile); // txtFileAlt-Ascii-Codierung cZeile := Ascii2Ansi(cZeile); // Ascii -> Ansi cZeile := Ansi2Ascii(cZeile); // Ansi -> Ascii writeLn(txtFileNeu,cZeile); Und jetzt die Frage, was mache ich falsch: Readln/Writeln oder vielleicht String-Variable schuld? |
Re: Ascii oder Ansi
Zitat:
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). |
Re: Ascii oder Ansi
Zitat:
|
Re: Ascii oder Ansi
Es ist doch einfach.
Nur das Programm, welches die Daten erstellt (und vielleicht wieder ließt) entscheidet/weiß 100%ig was für ein Format die Daten in der Datei haben. ANSI und ASCII sind halt nur Interpretationen der BYTEs (8-Bit-Daten). Wenn also keine Definition (um welche Daten es sich genau handelt) in der Datei vorhanden sind, dann gibt es keine sichere Möglichkeit zu prüfen um was es sich handelt. Für reine Textdateien sind aber auch schon verschiedene Markerbytes definiert: kein Markerbyte am Dateianfang = ANSI $FF $FE am Dateianfang = UniCode (Low Endian) $FE $FF am Dateianfang = UniCode (Big Endian) $FF $FE $00 $00 am Dateianfang = UniCode4 (Low Endian) $00 $00 $FE $FF am Dateianfang = UniCode4 (Big Endian) Du kannst es dir so vorstellen ... man nehme Byte, aber wie willst du entscheiden, was in diesem Byte steckt? ShortInt, Byte, AnsiChar, ASCII-Char, UTF8-Char, Boolean, Set ... |
Re: Ascii oder Ansi
Hallo,
Zitat:
$EF $BB $BF am Dateianfang = UTF8 Gruß xaromz |
Re: Ascii oder Ansi
Jupp, hatte es nur nicht mehr im Kopf -.-''
Und natürlich gibt es noch mehr, aber das sind dann wohl erstmal die Markerbytes, welche von den meisten Programmen erkannt werden (abgesehn vom UCS4) |
Re: Ascii oder Ansi
War UCS nicht inzwischen zugunsten von UTF "deprecated" deklariert worden (also alle UCS)?!
Nachtrag: Hah, ich habe eine Idee. "egal", versuche mal folgendes: öffne eine Bitmap-Datei mit deinem Lieblings-Bildbetrachter. Danach öffne die gleiche Datei mit Notepad und danach, insofern vorhanden, mit einem Hexeditor. Was siehst du? Richtig, die gleichen Daten, aber unterschiedlich repräsentiert. Und die Repräsentation ergibt sich daraus wie die Informationen/Daten dekodiert wurden. |
Re: Ascii oder Ansi
Das habe ich in einer PM an himitsu geschrieben:
Ich glaube deswegen meine Aussage. Allerdings trog mich wohl meine Erinnerung. Die Aussage gilt nur für UCS-2 in Relation zu UTF-16 (macht ja Sinn). Also nicht UCS sondern UCS-2 sollte nicht mehr benutzt werden, weil ja in UTF-16 die Surrogates (zusammengesetzte Codes) dazugekommen sind. Meine obige Aussage zu "allen UCS" trifft also nicht zu. Gemeint ist, daß UCS-2 nicht mehr benutzt werden soll (auch als Begriff), weil in UTF-16 Surrogates eingeführt wurden, die eben dann mehr als 2 Byte pro Zeichen lang sind ... deswegen wäre "Unicode Character String 2 Byte" (UCS 2) falsch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 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