Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringReplace in Delphi 2009 (https://www.delphipraxis.net/122740-stringreplace-delphi-2009-a.html)

Prototypjack 21. Okt 2008 12:17


StringReplace in Delphi 2009
 
Moin,

Ist StringReplace aus SysUtils in Delphi 2009 wirklich Unicode-fähig? Im Code-Kommentar und in der Hilfe steht zwar, dass diese Funktion erwartet, dass der String Multi-Byte-Zeichen enthalten könnte, aber dennoch greift die Funktion innerhalb auf eine Menge Ansi-Funktionen (AnsiUpperCase, AnsiPos, etc.) zurück.

Irgendwas kann doch da nicht stimmen, oder?

Grüße,
Max

Flocke 21. Okt 2008 18:37

Re: StringReplace in Delphi 2009
 
AnsiPos und AnsiUpperCase arbeiten unter D2009 auch mit Unicode - wie fast alle stringverarbeitenden Routinen.

Prototypjack 22. Okt 2008 13:33

Re: StringReplace in Delphi 2009
 
Moin,

OK, das verstehe ich nicht (aber ich kam mit etwas Nachforschung zu selbigem Ergebnis).

Ich dachte das [b]Ansi[b] im Namen würde die Funktion wissentlich auf Ansi-Strings beschränken? Merkwürdig implementiert ist das.

Grüße & Danke,
Max

Volle 22. Okt 2008 13:40

Re: StringReplace in Delphi 2009
 
Zitat:

Borland Hilfe
Trotz ihres Namens ist die Klasse AnsiString nicht auf den ANSI-Zeichensatz beschränkt, sondern kann jeden Zeichensatz benutzen, der vom aktuell definierten Gebietsschema unterstützt wird, einschließlich Multibyte-Zeichensätze.
is aber schon komisch ....

Lasse2002 22. Okt 2008 14:23

Re: StringReplace in Delphi 2009
 
Die Namensgebung ist jetzt vielleicht etwas ungewohnt, aber wenn man sich es genau überlegt macht es schon Sinn. Weil sonst müßte man alle Ansi-Funktionen gegen Wide-Funktionen austauschen. Das würde gemeinsamen Quellcode mit älteren Delphiversionen und die Portierung nach Unicode ziemlich aufwändig machen.

Viele Ansifunktionen haben übrigens auch in früheren Versionen schon intern mit Unicode gearbeitet. Bisher hat z.B. AnsiUpperCase die Windows Funktion CharUpperBuffA aufgerufen. CharUpperBuffA hat dann den String erst mal nach Unicode konvertiert, dann in Großbuchstaben umgewandelt, und dann zurück nach Ansi konvertiert. Somit ist AnsiUpperCase in Delphi 2009 schneller geworden, und der Speicherverbrauch gesunken, da die Strings nicht mehr von Ansi nach Unicode konvertiert werden müssen. Anmerkung: Da Win9x keine Unicodeunterstützung mitliefert, verhält sich CharUpperBuffA dort vermutlich anders.

Vielleicht hat ja jemand mal Lust genauer zu untersuchen, wie sich Verwendung von Windows Ansi Funktionen auf die Fragmentierung des Heaps auswirkt.


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