Autor Beitrag
Bruzzler
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 07.10.09 10:40 
Hilfe Leute, ich habe schon vergeblich nach einer Lösung gesucht. Ich müsste dieses Komische Symbol an das Ende einer TextDatei schreiben.



Ich habe hierdurch : www.fileformat.info/.../char/25a1/index.htm herausgefunden, dass dieses Symbol wohl Unicode ist. Gibt es eine Möglichkeit dieses Symbol einfach und ohne Geld Aufwand in eine Textdatei zu schreiben. Soviel ich weis ist ja Delphi 2007 nicht Unicode fähig.


Vielen Dank schon im Voraus.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 07.10.09 10:56 
Hallo und :welcome: in der Entwickler-Ecke,

Wenn das eine Textdatei ist, dann muss die ganze Textdatei in einem "anderen Format" abgespeichert werden. Das hat nichts mit Delphi zu tun, sondern ist generell so. Eine Textdatei ist ja nichts anderes als eine Folge von Bytes, die dann als "Buchstaben" interpretiert werden. In den meisten Textdateien gilt "1 Byte = 1 Buchstabe". Das wird hier nicht funktionieren.

Du müsstest die ganze Datei im UTF-16 oder UTF-8 Format abspeichern. Mit den gängigen Methoden (myStringlist.WriteToFile) klappt das erst mit Delphi 2009. Ich habe hier grade nur D2009, daher kann ich das nicht genau testen, aber generell sollte das so funktionieren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// Pseudocode
aWideString := Inhalt_der_Textdatei + #9633;
aUTF8_String := Utf8Encode(aWideString);

FileStream erzeugen;
UTF8-Byte-Order-Markierung (EF BB BF) in den Stream schreiben;
aUTF8_String in den Stream schreiben;
FileStream schließen;

Das Lesen der Datei muss man dann natürlich auch wieder anders gestalten.

_________________
We are, we were and will not be.
Bruzzler Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 07.10.09 12:43 
Erstmal Danke, aber das war mir ein bißchen zu schnell sorry.

Funktioniert das ganz nun mit Delphi 2007? Oder nur mit 2009?

Dieser PseudoCode den du gepostet hast, gilt der für 2007 oder 2009?
Den konnte ich nicht ganz nachvollziehen.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 07.10.09 12:53 
Der Pseudocode gilt Afaik sogar für Delphi 7, da es da schon Filestreams gibt. Und vielleicht geht der Sourcecode sogar schon in Delphi 7. Einfach mal in die Hilfedatei gucken, da kommt man dann schon gewaltig weiter ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 07.10.09 13:03 
Ja, das geht auch mit Delphi 7. Habe ich auch so ähnlich in meinem Player benutzt, um m3u8-Playlisten (UTF-8-kodiert) zu unterstützen.

Idee dahinter ist folgende.

Zuerst packt man die Textdatei in einen WideString. Dieser ist intern UTF-16 kodiert, kommt also mit "Unicode-Zeichen" klar (gibts auch schon bei Delphi 7). Dann wandelt man diesen Widestring mit dem zusätzlichen Zeichen in einen UTF-8-kodierten String um. Muss man nicht tun, ist aber sehr sinnvoll - sonst wird die Textdatei direkt doppelt so groß.
Anschließend speichert man diesen UTF-8-String in eine Textdatei. Damit ein Texteditor die "richtig" lesen kann, sollte man am Anfang der Datei "sagen", dass hier UTF-8 verwendet wird. Dafür sind diese drei Bytes EF BB BF da. Lässt man die weg, hat man wahrscheinlich anstelle der Sonderzeichen (deines, aber auch die deutschen Umlaute) zwei (oder mehr) andere Zeichen, die irgendwie komisch aussehen.

Bei Delphi 2009 geht das automatisch, da kann man den SaveToFile-Methoden die Kodierung mitgeben. Bei früheren Versionen muss man da etwas basteln.

_________________
We are, we were and will not be.
Bruzzler Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 07.10.09 14:19 
Ok, habe ich soweit verstanden, nur das mit der Byte-Order-Markierung nicht ganz. Schreibe ich da einfach an die Erste Stelle der Datei die Bytes? Das ist nicht gut, dann dann wird mein anderes Programm diese Datei wohl nicht mehr schlucken.
Bruzzler Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 08.10.09 11:36 
Ok vergesst es. Habs geschafft danke an alle!