Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringList.Delete und UNICODE ??? (https://www.delphipraxis.net/164212-tstringlist-delete-und-unicode.html)

Schucki 2. Nov 2011 19:32

Delphi-Version: 5

TStringList.Delete und UNICODE ???
 
Hallo zusammen,

ich habe das Problem das ich in einer TStringListe mehrere Zeichen habe die auch UNICODE sind, ich möchte aus dieser Liste nun Einträge löschen.

Ich verwende hierzu:

Delphi-Quellcode:
...
var strlMsg:TStringList;
...
  strlMsg:=TStringList.Create;
  strlMsg.Delete(0);
  FreeAndNil(strlMsg);
...
Nun verschwinden zwar die erste Zeilen aber irgendwie auch die Info das es sich bei der Liste um eine Liste mit UNICODE Zeichen handelt. :-(

Wie stellt man das nun wieder an? Kann man die Liste noch irgendwie einstellen das er die als UNICODE behandeln soll???


Gruß Frank

jaenicke 2. Nov 2011 20:03

AW: TStringList.Delete und UNICODE ???
 
Um welche Delphiversion geht es denn? Um Delphi 5 wie im Beitrag steht? Um Delphi 2006 wie im Profil steht? Um eine aktuellere Version?

Bei Delphi XE ist das nämlich z.B. kein Problem. Und die beiden angegebenen Versionen waren noch nicht unicodefähig.

himitsu 2. Nov 2011 20:09

AW: TStringList.Delete und UNICODE ???
 
Beim Speichern (SaveTo...) kannst du angeben, was sich in dieser Datei befindet.
[edit]ab Unicode-Delphis[/edit]

Vor Delphi 2009 kann TStingList nicht mit Unicode umgehen.

Vermutlich befindet sich ein BOM am Anfang der Datei, welcher von dieser Stringliste noch nicht beachtet und einfach als "Buchstaben" behandelt wird.
Dieses BOM müßtest du natürlich wieder hinzufügen, wenn du es gelöscht hast :zwinker:
(bei UTF-8 sind das die ersten 3 Byte/AnsiChar, bzw. umkodiert 1 Char in UCS2)


Unicode?
Du meinst wohl eine UTF-8 kodierte Datei?
Denn mit UCS2 würde die Stringliste nicht arbeiten, da sie bei der ersten #0 abbricht.

Schucki 2. Nov 2011 20:24

AW: TStringList.Delete und UNICODE ???
 
Ihr habt natürlich recht... :-(
Momentan bin ich mit RAD Studio 2010 unterwegs und komme vom BDS 2006.

Das mit V5 im Beitrag oben stimmt nicht. :-(

Ich habe mein Programm nun so langsam angepasst doch hänge ich mich immer wieder an diesem Unicode Zeuch auf da ich es anscheinend noch nicht ganz klar verstanden habe.


Gruß Frank

himitsu 2. Nov 2011 20:33

AW: TStringList.Delete und UNICODE ???
 
Zitat:

Zitat von Schucki (Beitrag 1134130)
Das mit V5 im Beitrag oben stimmt nicht. :-(

Läßt sich im erweiterten Editor bestimmt noch ändern, aber da vergessen fast alle was anzugeben. (gibt auch schon 'nen in die Jahre gekommenen Bugreport von mir, wie man das beheben könnte)

Zitat:

Zitat von Schucki (Beitrag 1134130)
Ich habe mein Programm nun so langsam angepasst doch hänge ich mich immer wieder an diesem Unicode Zeuch auf da ich es anscheinend noch nicht ganz klar verstanden habe.

Also, seit D2009 kann man beim SaveToFile angeben, wie gespeichert werden soll.

Dort kanst du die Singletons in Delphi-Referenz durchsuchenTEncoding verwenden, also direkt TEncoding.irgendwas, als Parameter übergeben.

Schucki 3. Nov 2011 17:05

AW: TStringList.Delete und UNICODE ???
 
Ok vielen Dank für die Erklärung, abschließend eine Frage noch.
Wie ist das mit der Dateigröße eigentlich?

Ist es so das dann jedes Zeichen IMMER in 2 Byte gespeichert wird oder eben nur diese die im "normalen" Alphabet nicht vorkommen?

Wenn es eine reine deutsche Textdatei ist, ist diese dann immer doppelt so groß???

Gruß Frank

jaenicke 3. Nov 2011 17:21

AW: TStringList.Delete und UNICODE ???
 
Ja, die Datei ist doppelt so groß. Wenn du das nicht möchtest, benutze UTF-8 statt dem "normalen" Unicode mit immer 16-Bit pro Zeichen.

himitsu 3. Nov 2011 18:20

AW: TStringList.Delete und UNICODE ???
 
Bei vorwiegend asiatischen und ähnlichen Sprachen, mit vielen Zeichen in den höheren Unicodebereichen, wird UTF-8 bestimmt mehr Platz belegen, als UCS2.

UCS2 = immer 2 Byte und ein kleiner Bereich

Wobei Windows eigentlich mehr UTF-16 nutzt, statt UCS2.
Nur daß UTF-16 mit UTF-8 und UTF-7 rein garnichts gemeinsam haben, da nur der Name gleich klingt, aber nicht die Kodierung.

Bei UTF-16 wurde ein Bereich (mitten drin) im UCS2 belegt und wird als Surrogate Pairs verwendet wo dann jeweils 2 Zeichen ein Zeichen ergeben. (nur hat man da Platz verwendet ... das merkt man, wenn man sich die Definituin mal ansieht)

Bernhard Geyer 3. Nov 2011 19:02

AW: TStringList.Delete und UNICODE ???
 
Zitat:

Zitat von himitsu (Beitrag 1134356)
Wobei Windows eigentlich mehr UTF-16 nutzt, statt UCS2.

Bis NT hat Windows UCS2 verwendet, ab Windows 2000 UTF-16.

Und .NET/Java verwenden ebenfalls UTF-16 wobei Java AFAIK am Anfang noch UCS2 verwendet hat.

Luckie 3. Nov 2011 19:06

AW: TStringList.Delete und UNICODE ???
 
http://www.michael-puff.de/Programmi...code-UTF.shtml


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