Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suche TNT Befehl:Einlesen von Widestring[Unicode] aus Datei (https://www.delphipraxis.net/109439-suche-tnt-befehl-einlesen-von-widestring%5Bunicode%5D-aus-datei.html)

Tillie 1. Mär 2008 14:12


Suche TNT Befehl:Einlesen von Widestring[Unicode] aus Datei
 
Hallo,

Wie kann ich aus einer Datei ein Widestring einlesen, der dabei mit Unicode (Türkische Buchstaben) gefüllt wird? Mit Read funktioniert das ja nicht:
Delphi-Quellcode:
var
  Wort:WideString;
  Datei:TextFile;

begin
SetCurrentDir ('D:/');
AssignFile(Datei, 'Datei.txt'); //Datei.txt ist im Unicode Format
Reset (Datei);
Read (Datei, Wort); // Wort enthält auf diese Weise ja keine türkischen Buchstaben/Unicode sondern ANSI-Zeichensalat
CloseFile(Datei);
Für Türkische Sprache im Programm greife ich momentan ansonsten auf die TNT Units der Version 2.3.0 zurück (manuell), habe aber leider darin bisher keine Entsprechung für Read gefunden.

Zusammengefasst: Ich suche also einen Befehl (aus den TNT Units) um aus einer Unicode Datei, ein Wort in Unicode Zeichen in einem Widestring einzulesen, um diesen anschließend innerhalb des Programms weitergeben zu können.

Kann mir jemand weiter helfen?

Liebe Grüße,
Tillie

grenzgaenger 1. Mär 2008 14:22

Re: Suche TNT Befehl:Einlesen von Widestring[Unicode] aus Da
 
wie wärs mit 'ner zeichenkonvertierung? hab mal die suchbegriffe, welche du gebracht hast, in die OH eingegeben... da kommt dann so was raus...
  • AnsiToUtf8
  • Utf8ToUnicode
  • WideStringToUCS4String

denke, damit solltest du weiterkommen...

Bernhard Geyer 1. Mär 2008 14:38

Re: Suche TNT Befehl:Einlesen von Widestring[Unicode] aus Da
 
Delphi-Quellcode:
var
  strList: TWidestrings; (Könnte bei TNT TTNTWideStrings heißen)
begin
  strList := TWideStringList.Create;
  try
    strList.LoadFromFile(<Unicodedateiname>);
    if strList.Count > 0 then
      Word := strList[0];
  finally
    strList.Free;
  end;
end;
Für Detail schau einfach in die Implementierung dier WideStringList-Klasse von TNT

Tillie 1. Mär 2008 18:30

Re: Suche TNT Befehl:Einlesen von Widestring[Unicode] aus Da
 
Liste der Anhänge anzeigen (Anzahl: 1)
Alsooo...

@ graenzgaenger
Mit den Genannten konnte ich mir nicht helfen. Es ging ja um das Einlesen aus der Datei an sich und nicht ums Umwandeln von Formaten - wobei letzteres auch leider in diesem Fall nicht so einfach mit diesen Befehlen funktioniert, weil ja türkische Buchstaben nicht im ANSI Code vorhandeln sind. Daher kann ANSI Code auch nicht in Türkischen Unicode umgewandelt werden und umgekehrt. Trotzdem danke, dass du versucht hast mir zu helfen!

@ Bernhard Geyer
Vielen Dank! Tatsächlich war ich schon irgendwo in der Richtung am Suchen, aber hab den Dreh nicht bekommen. Dank deinem kompletten Beispiel konnte ich das sehr gut nachvollziehen! Und so hat es jetzt sogar ohne TNT Units funktioniert (!), allein mit der Unit Widestrings von Delphi. (TNT brauch ich aber trotzdem noch umd dann weiter arbeiten zu können)

[Es gibt übrigens schon eine TNTWidestring Unit, wobei diese Unit insofern etwas seltsam ist, dass ich da nicht erkennen konnte, was darin an zusätzlichen Komponten enthalten ist. Ich habe den Eindruck, diese Unit, die ich hier habe, wurde eventuell noch für Vorgängerversionen von Delphi erstellt, wo es noch kein Widestring gab. Na, wie auch immer.]


Noch was: Die Quelldatei muss für diese Variante als "Unicode" abgespeichert werden, nicht als "UTF-8". Das ändert zwar beispielsweise im Windows Editor nichts an der Darstellung aber in Delphi bringt dass dann sehr lustige Ergebnisse....

[So versuchte ich zunächst aus einer UTF-8 Datei Tıllıe (i ohne i.Punkt) auszulesen und was dabei rauskam siehst du im Anhang *g* - war erstmal ziemlich verwirrt, aber mit Unicode-Dateien funktionierts ja wie gesagt, also no problem]


Nochmal vielen vielen Dank!!!!
Frohes Schaffen & Bis bald :zwinker:

:hi:

Bernhard Geyer 1. Mär 2008 20:05

Re: Suche TNT Befehl:Einlesen von Widestring[Unicode] aus Da
 
Zitat:

Zitat von Tillie
... Ich habe den Eindruck, diese Unit, die ich hier habe, wurde eventuell noch für Vorgängerversionen von Delphi erstellt, wo es noch kein Widestring gab. Na, wie auch immer.]

Widestrings gibt seit Delphi 3 (oder wars schon D2 :gruebel: ) Jedoch ist die "sonstige" Unicodeunterstützung erst schrittweise dazugekommen und wird erst mit Delphi 2008 vollständig werden, so das genügend "Betätigungsfeld" für Komponentensammlungen besteht und sowas auch vor 2008 bereitzustellen.

Zitat:

Zitat von Tillie
... aber in Delphi bringt dass dann sehr lustige Ergebnisse....

Wirst vermutlich die UTF8-Codierung zu gesicht bekommen da Codegear hier geschlammt hat und nicht gleiche alle möglichen Codierungen von Unicodedateien unterstützt.[/quote]


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 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