Entwickler-Ecke
Dateizugriff - Textinhalt UTF-16 in String laden
Nafetz - Do 03.02.11 18:34
Titel: Textinhalt UTF-16 in String laden
Hallo,
ich hatte nur ein kleines Projekt realisieren wollen, bei dem ich eigentlich trotz meinem bescheidenen Niveau nicht mit Schwierigkeiten gerechnet hatte, weil ich alles schon einmal realisiert habe - dachte ich zumindest.
Jetzt habe ich bemerkt, dass ich mit der verwendeten Funktion FileToString nicht klar komme, weil ich eine Datei auslesen möchte, die nicht im ANSI-Format vorliegt. Ich hatte die Datei im Vorfeld mit Notepad++ angesehen und nicht beachtet, dass der Inhalt mit der Kodierung UCS-2 Big Endian vorliegt. Jetzt scheint alle bislang gemachte Arbeit umsonst...
Ich habe einige interessante Ansätze er"google"n können, jedoch führt das bei mir nicht zum Erfolg.
Meine Variable ist von Typ String. Mit der Funktion FileToString landen in der Variablen immer '#0' Zeichen zwischen meinen Buchstaben. Das wäre grundsätzlich kein Problem, wenn ich wüsste, wie ich trotzdem eine Zeichenfolge suchen könnte.
Z.B. mit
if Pos(StringSuchtext, StringVariable) > 0 then
Wenn ich als StringSuchtext jetzt nehmen könnte
Delphi-Quelltext
1:
| StringSuchtext := 'H' + #0 + 'a' |
dann würde ich weiterkommen. Das hat bei mir jedoch nicht geklappt. Somit muss ich wohl umkonvertieren. Dazu habe ich
http://swissdelphicenter.ch/en/showcode.php?id=1692 gefunden. Allerdings kenne ich mich da mit der CodePage nicht aus. Die probierten CodePages 1250 führten auch hier nicht zum Erfolg.
Hat mir jemand noch einen Tipp?
Vorab vielen Dank.
Gruß, Stefan
jaenicke - Fr 04.02.11 05:46
Hallo und :welcome:
Die wichtigste Frage, da du das im Profil nicht ausgefüllt hast:
Welche Delphiversion benutzt du?
Denn ab Delphi 2009 unterstützt Delphi direkt Unicode, in den älteren Versionen nur wenig (mit Hilfe von eben z.B. WideString).
Nafetz hat folgendes geschrieben : |
| Mit der Funktion FileToString landen in der Variablen immer '#0' Zeichen zwischen meinen Buchstaben. |
Was ist das denn für eine Funktion?
Wenn darin z.B. AnsiStrings verwendet werden, kann das nicht gut gehen. Auch nicht in Delphi 2009 oder höher!
Es gibt dafür eine Klasse. Die habe ich zwar nie verwendet, soll aber auch unter älteren Versionen von Delphi funktionieren:
http://gp.17slon.com/gp/gptextfile.htm
Und solltest du Delphi 2009 oder höher haben, kannst du dir das alles sparen und die Datei einfach direkt einlesen, z.B. mit TStringList, ...
Nafetz - Fr 04.02.11 09:40
Hallo,
ich benutze Delphi 2005. Die FileToString habe ich von
http://www.delphi-treff.de/tipps/dateienverzeichnisse/dateioperationen/datei-in-einen-string-laden/ übernommen.
Wie ich inzwischen herausgefunden habe, war meine Aussage von gestern Abend nicht ganz korrekt. Es ist doch möglich, den Suchstring so anzupassen, dass Werte gefunden werden:
Delphi-Quelltext
1:
| Stelle1 := Pos('H' + #0 + 'a',StringVariable); |
Auch das entfernen der Sonderzeichen aus der Stringvariablen klappt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| function DeleteSpecialCharacters(UTFString: String): String; begin while Pos(#0, UTFString) > 0 do Delete(UTFString,Pos(#0, UTFString),1); Result := UTFString; end; |
Damit blieben am Anfang noch zwei Sonderzeichen übrib, bei denen ich nicht weiß, wie ich die erwischen kann: þ und ÿ. Zur Not kann ich die aber vermutlich einfach vorne weglöschen, da diese immer am Anfang stehen.
Das wäre zumindest eine unprofessionelle Lösung, mit der ich wenigstens weiterkomme - auch wenn sie den Wissenshorizont nicht erweitert :)
Falls noch jemand hilfreiche Tipps zur Weiterbildung hat, freue ich mich natürlich. In jedem Fall herzlichen Dank für die Mühe.
Gruß, Stefan
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!