![]() |
Delphi 2009: String, UnicodeString oder WideString?
Hallo!
Nachdem ich hier im Forum einige wiedersprechende Äußerungen zu den o.g. Datentypen gelesen habe, bin ich jetzt ein wenig verwirrt und möchte endlich wissen, welches von o.g. Datentypen ich verwenden soll. Ich benutze Delphi 2009 und arbeite an einem Projekt, dass mit Unicode-Daten zu tun hat. Z.B. bekomme ich von einem HTTP-Webservice die Unicode-Daten geliefert, lade diese in einem String und gebe für weitere Bearbeitung weiter. Welchen der o.g. String-Typen soll ich dabei deklarieren? Welche Unterschied zwischen String und UnicodeString und String und WideString in Delphi 2009? |
Re: Delphi 2009: String, UnicodeString oder WideString?
[edit] About String Types
A string represents a sequence of characters. Delphi supports the following predefined string types. String types Type Maximum length Memory required Used for ShortString 255 characters 2 to 256 bytes Backward compatibility AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, Unicode characters, etc. UnicodeString ~2^30 characters 4 bytes to 2GB Unicode characters, 8-bit (ANSI) characters, multi-user servers and multi-language applications WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications. UnicodeString is generally preferred to WideString, except for COM applications. |
Re: Delphi 2009: String, UnicodeString oder WideString?
Vielen Dank für die schnelle Antwort!
Diese Informatinen habe ich auch gefunden. Was ist dann mit dem einfachen String? Wie ich schon erwähnt habe, habe ich bereits viele Informationen über diese Typen gelesen, manchmal widerspachen sich die Informationen. Deswegen brauche ich jetzt eine konkrete Aussage. Was muss ich in meinem Fall benutzen: String, UnicodeString, WideString oder sonst noch was? |
Re: Delphi 2009: String, UnicodeString oder WideString?
On the Win32 platform, the compiler interprets string (when it appears without a bracketed number after it) as UnicodeString.
Wenn du zB ANSI-String
Delphi-Quellcode:
var
MeiNString : String[200]; UnicodeString
Delphi-Quellcode:
var
MeiNString : String; |
Re: Delphi 2009: String, UnicodeString oder WideString?
Also string?
|
Re: Delphi 2009: String, UnicodeString oder WideString?
Ja, damit machst du nichts falsch. Unicode Daten machen kein Problem mit dem typ "string"
|
Re: Delphi 2009: String, UnicodeString oder WideString?
Vielen Dank!
|
Re: Delphi 2009: String, UnicodeString oder WideString?
Zitat:
ein ansi string ab d 2009 sieht so aus:
Delphi-Quellcode:
var
MeiNString : AnsiString; |
Re: Delphi 2009: String, UnicodeString oder WideString?
programmintern:
die "systemabhängigen" Typen > String, Char, Integer, Cardinal somit paßt es sich immer an den Compiler an (z.B. ist der String bis D2007 ein AnsiString und ab D2009 ist es ein UnicodeString) programmextern oder wenn man geziehlt einen bestimmten Typen benötigt: (also beim Speichern, Datenübertagung oder der Komunikation mit DLLs, COM-Services und anderen externen Interfaces) die statischen Typen > ShortString (String[x]), AnsiString, WideString, UnicodeString, LongInt (und Co.), PAnsiChar, PWideChar alles entsprechend der Anforderungen an die Daten und Speicherveraltung |
AW: Delphi 2009: String, UnicodeString oder WideString?
Ich weiß das dies ein alter Eintrag ist,
aber es passt ganz gut. ein string wurde früher so gespeichert Byte 1 die länge des strings Byte 2 fortlaufend der Inhalt des strings OK wie ist das Heute Mit string und WideString bei string Byte1 + Byte 2 länge des strings Byte 3 + Byte 4 fortlaufend der Inhalt des strings ist das richtig ? und wie wird ein Widestring gespeichert ? was ist der Unterschied zum string ? und wird der AnsiString wie der alte String gespeichert ? |
AW: Delphi 2009: String, UnicodeString oder WideString?
Das mit der Länge gilt eigentlich seit D1 nicht mehr, sondern nur für ShortString. ( String wurde aber u.U. je nach Einstellung bei D < D2009 als ShortString implementiert).
Bei AnsiString/UnicodeString ( außer bei nextgen) beginnt der Index zwar ab 1 (Rückwärtskompatibilität), die Implementierung ist aber wie bei C eine 0 terminierter String ( an Stelle 1 steht ein Zeiger auf den eigentlichen String) |
AW: Delphi 2009: String, UnicodeString oder WideString?
Für den genauen Aufbau siehe System.pas, wo es auch seit 2009 ein paar Funktionen zum Auslesen/Bearbeiten gibt, vorallem von der CodePage.
WideString geht schon immer auf die OleAuth32.dll und stellt quasi nur einen Wrapper dar, welcher u.A. auf ![]() String ist ein compilerabhängiger "Alias" und geht auf AnsiString (D2 bis D2007), UnicodeString (seit D2009) und ShortString (D1, wobei es dort nur diesen String gab und es noch keine Alias war) intern ist es ein aufgemotztes "dynamisches Array"
PS: Schaut mal in die OH ... dort tut wirklich manchmal jemand was und man hat den String-Aufbau dort nun auch endlich mal dokumentiert. Zitat:
![]() ![]() ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz