Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unicode in eine Textfile Speichern (https://www.delphipraxis.net/78485-unicode-eine-textfile-speichern.html)

Domi 5. Okt 2006 19:59


Unicode in eine Textfile Speichern
 
Guten Tag,

Ich hoffe erstmal ich bin hier im richtigen Forum dafür, weil für euch ist die Frage wahrscheinlich ziemlich einfach, aber mein momentanes Wissen und Suchen in Hilfen übersteigt es.

Nun gut, also ich schildere das Problem recht simpel. Ich habe einen Unicode, also kyrillische Schriftzeichen zum Beispiel. Nun möchte ich diese Zeichen in einer Datei abspeichern, damit man sie später wieder abrufen kann. Jedoch gehen diese eben verloren wenn ich es in eine Datei abspeichere des Typs "Textfile"... und "file of widestring" ist ja nicht machbar... Ich hab mir überlegt die Datei so zu deklarieren dass sie ein Array of Char Zeichen darstellt.. aber irgendwie hab ich das auch nicht wirklich hinbiegen können. Vielleicht kann mir einer sagen ob dass der richtige Weg ist und ich mir da nur mehr Mühe geben sollte oder ob es eine andere Methode für sowas eigentlich recht einfaches gibt?

mfg
Domi

mkinzler 5. Okt 2006 20:18

Re: Unicode in eine Textfile Speichern
 
Du könntest sie binär in eine Datei speichern, in einen Datenbank oder als RTF.

Gausi 5. Okt 2006 20:21

Re: Unicode in eine Textfile Speichern
 
Oder du nimmst eine Unicode-fähige Komponente, wie z.B. TntMemo aus den TNTControls. Damit einfach SaveToFile (wie bei ner normalen Memo auch), und man hat das Unicode-Gedöns in einer Textdatei.

TntStrings/TntStringlist kann man natürlich auch nehmen.

r2c2 5. Okt 2006 20:28

Re: Unicode in eine Textfile Speichern
 
es gibt IMHO da 2 Möglichkeiten:
a) ne 3rd-Party-Komponente/Klasse nehmen, die das kann
b) selber machen

zu b) musst du aufpassen, dass je anch Unicode-Variante auch mal 16Bit nötig sind(UTF8<-->UTF16). Also n array of Char geht nur bedingt(UTF8 mit aufpassen bei nicht ASCII-Zeichen)... ggf. is auch ne Art Header möglich(das Teil hat noch irgend n Namen, weiß aber nicht mehr welchen), der die Art der Codierung angibt...

Wenn ich Blödsinn rede, korrigiert mich. Hab mit Unicode bisher relativ wenig gemacht...

mfg

Christian

Ralf Kaiser 5. Okt 2006 21:05

Re: Unicode in eine Textfile Speichern
 
Zitat:

Zitat von r2c2
ggf. is auch ne Art Header möglich(das Teil hat noch irgend n Namen, weiß aber nicht mehr welchen), der die Art der Codierung angibt

BOM = Byte Order Mark

Siehe auch: http://de.wikipedia.org/wiki/Byte_Order_Mark

Ciao,
Ralf

Domi 5. Okt 2006 23:01

Re: Unicode in eine Textfile Speichern
 
Puh.. danke für die vielen Antworten... leider hab ich ehrlich gesagt das meiste nicht verstanden und mich jetzt nochmal daran versucht mit Array of Widechar und naja hat geklappt :). Also dann danke ich auf jeden Fall! Bin ich schonmal einen Schritt weiter ;).

mkinzler 6. Okt 2006 05:45

Re: Unicode in eine Textfile Speichern
 
Mit welchen Komponenten verwaltest/verarbeitest du die Texte den?

Ydobon 6. Okt 2006 08:24

Re: Unicode in eine Textfile Speichern
 
Interessante Frage, Komponenten, die mit Unicode umgehen können, dürften auch Möglichkeiten haben diesen auf die Platte zu bringen.

Ansonsten geht es auch ohne zusätzlichen Aufwand mit den Delphi Hausmitteln. TFileStream frisst so ziemlich alles und mit UTF8Encode bzw. UTF8Decode kann man es wie normale Ansistrings behandeln. Dann funktioniert auch die Textfile.

Domi 6. Okt 2006 10:19

Re: Unicode in eine Textfile Speichern
 
Hi, tut mir Leid ich bin noch nicht soo erfahren mit Delphi und all seinen Funktionen, mach es erst seit so 1 1/4 Jahr halt in der Schule!

Nun gut also ich mache es so momentan,dass ich mir eben die TNTEdit felder reingeholt habe, weil ohne Widestrings geht es eben doch nicht und dann wird alles über Umwege die ja jetzt nicht soo wichtig sind dann in eine file of Widechar reingesteckt... also falls es wen interessiert das sieht beim speichern bei mir so aus:

Delphi-Quellcode:
   
    Liste.reset_next;
    AssignFile(Speicher,'Vok.txt');
    Rewrite(Speicher);



    for i:= 1 to Wortlaenge do
    begin
      wort[i] := (Liste.getelement as TVokpaar).GibRussisch[i];
      Write(Speicher,wort[i]);
    end;
    for i:= 1 to Wortlaenge do
    begin
      wort[i] := (Liste.getelement as TVokpaar).GibDeutsch[i];
      Write(Speicher,wort[i]);
    end;
    case (Liste.getelement as Tvokpaar).GibStatus of
      gekonnt: wort[1] := '1';
      selten:  wort[1] := '2';
      nie:     wort[1] := '3';
    end;
    Write(Speicher,wort[1]);
Ist wahrscheinlich nicht die eleganteste Art und Weise, aber das meiste andere übersteigt meine bekannten Kreise... Aber ich denke Streams werde ich noch demnächst lernen... irgendwann mal ;). Achja falls sich wer fragt, wofür das Programm ist, dass soll mal einen Russisch Vokabeltrainer darstellen. Ist auch schon fast bereit dazu angewendet zu werden :).

mfg
Domi

himitsu 7. Okt 2006 23:00

Re: Unicode in eine Textfile Speichern
 
Über die Suche hätte man zwar den Grund auch nochmal finden können, aber ich sag's gern nochmal ._.

TextFile ist nicht unicodefähig :warn:
(das hast'e ja schon mitbekommen)

Der Grund:
Write/WriteLn nimmt zwar einen WideString (Unicode) an, wandelt dieses aber in Ansi um, bevor es in der Datei gespeichert wird.
Bei Read/ReadLn ist es dann andersrum.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr.
Seite 1 von 2  1 2      

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