Re: ANSI oder nicht ANSI?
- From: Hans-Peter Diettrich <DrDiettrich1@xxxxxxx>
- Date: Sun, 19 Oct 2008 19:29:56 +0200
Jens Lenge schrieb:
Verstehe ich jetzt mal so, dass die Stringfunktionen - egal ob die "alten" (Pos/Copy usw.) oder die mit "Ansi..." - nicht ohne weiteres mit dem neuen UnicodeString funktionieren werden.
Kommt drauf an, was man unter "funktionieren" versteht. An den Funktionen ändert sich eigentlich nichts, wenn sie mit exakt den Daten gefüttert werden wie zuvor.
Wenn dabei aber der String von Unicode auf Ansi gewandelt wird, damit die Funktion ablaufen kann, dann kann diese Umwandlung eine unerwartete Auswirkung haben. Wenn es schon vorher unsinnig war, Pos() auf einen MBCS-String loszulassen, dann ändert sich daran auch bei Unicode nichts.
Verstehe ich richtig?
Falls ja, gibt es bei D2009 dann entsprechende "Unicode..."-String-Funktionen?
Sicher gibt es dort solche Funktionen, nur muß man sich mit deren neuen Grenzen vertraut machen.
Auf die Gefahr hin, mich zu wiederholen:
Die Basisfunktionen (wie Pos/Copy) arbeiten mit 1 bzw. 2 Byte großen "Elementen" (AnsiChar, WideChar), ohne sich darum zu kümmern, ob diese Elemente nun Zeichen, Teile von Zeichen oder ganz andere Informationen enthalten. Das fällt bei mir unter String-Verarbeitung, wo ein String nicht mehr als ein Array Of xyzChar ist.
Wenn es aber darum geht, Texte zu analysieren, auseinanderzunehmen oder zu ändern, dann muß man die dafür vorgesehenen Funktionen verwenden, die nicht z.B. versehentlich ein Byte eines längeren Zeichens verändern, oder die zusammengehörenden Bytes eines Zeichens auseinanderhacken. Dann ist es auch nicht generell möglich, 1 Zeichen in einer Variablen vom Typ Char abzulegen, weil manche Zeichen eben länger sein können als nur ein Element vom Datentyp Char (selbst wenn in D2009 Char=WideChar ist).
Wer sicher ist, daß seine Strings nichts anderes als Ansi-Zeichen enthalten, und damit 1 Char auch genau 1 Zeichen enthält, der sollte bei den AnsiStrings und Ansi-Funktionen bleiben, dann liegt er mit seiner (übernommenen) Stringverarbeitung auf der sicheren Seite. Dann bleibt es auch ohne Folgen, wenn irgendwo im Code versteckt angenommen wird, daß 1 Char genau 1 Byte ist. Solche versteckten Fallen kann der Compiler nicht immer erkennen und anmeckern :-(
Deshalb sollte man IMO vor einer Umstellung auf D2009 die unspezifischen Datentypen String und Char erst einmal durch AnsiString und AnsiChar ersetzen. Im nächsten Schritt muß der Code von Hand durchforstet werden, und man kann wieder auf String und Char umstellen, wenn man sicher ist, daß solche Daten nur unverändert transportiert oder höchstens zusammengesetzt werden, aber nicht auseinandergenommen oder analysiert werden. In denjenigen Teilen, die auch mit Unicode klarkommen, ggf. nach entsprechenden Anpassungen, kann dann auf UnicodeString umgestellt werden. Der Typ WideChar sollte eigentlich garnirgends verwendet werden, da er (wegen UTF-16) garnicht in der Lage ist, wirklich alle Unicode Zeichen aufzunehmen. Dann kann man schon an den Datentypen erkennen, wo man bei der Weiterentwicklung mit Fußangeln rechnen muß.
DoDi
.
- Follow-Ups:
- Re: ANSI oder nicht ANSI?
- From: Hubert Seidel
- Re: ANSI oder nicht ANSI?
- References:
- ANSI oder nicht ANSI?
- From: Jens Lenge
- Re: ANSI oder nicht ANSI?
- From: Hubert Seidel
- Re: ANSI oder nicht ANSI?
- From: Hans-Peter Diettrich
- Re: ANSI oder nicht ANSI?
- From: Jens Lenge
- ANSI oder nicht ANSI?
- Prev by Date: Re: Delphi-Entsprechung für isalpha, isdigit, ...
- Next by Date: wie richtig vererben - wie?
- Previous by thread: Re: ANSI oder nicht ANSI?
- Next by thread: Re: ANSI oder nicht ANSI?
- Index(es):
Relevant Pages
|
Loading