System.SysUtils.CharLength
Delphi
function CharLength(const S: UnicodeString; Index: Integer): Integer;
C++
extern DELPHI_PACKAGE int __fastcall CharLength(const System::UnicodeString S, int Index)/* overload */;
Eigenschaften
Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
---|---|---|---|---|
function | public | System.SysUtils.pas System.SysUtils.hpp |
System.SysUtils | System.SysUtils |
Beschreibung
Gibt die Anzahl der von einem Zeichen verwendeten Bytes zurück.
Mit CharLength stellen Sie die Größe in Byte eines Zeichens, das bei bei Index
beginnt, in S
fest. Wenn das Zeichen nicht bei Index
beginnt, gibt diese Funktion die Größe des Restes des Zeichens zurück, nicht die vollständige Zeichenlänge.
Hinweis:
Index
ist ein Elementindex inS
und kein Byte- oder Zeichenindex.
Wenn S ein AnsiString ist und im System kein Multibyte-Zeichensatz (MBCS) verwendet wird, gibt CharLength immer den Wert 1 zurück.
Das folgende Beispiel verdeutlicht die Arbeitsweise von CharLength.
type
SJISString = type AnsiString(932);
var
A: SJISString;
L: Integer;
begin
A := 'A' + 'B' + #$82#$A0 + // Japanisch Hiragana 'A'
#$82#$A2 + // Japanisch Hiragana 'I'
#$82#$A4 + // Japanisch Hiragana 'U'
'C' + 'D';
L := CharLength(A, 1); //gibt 1 ('A') zurück
L := CharLength(A, 2); //gibt 1 ('B') zurück
L := CharLength(A, 3); //gibt 2 zurück
L := CharLength(A, 4); //gibt 1 zurück
end.
Wenn in diesem Beispiel der Index 1 oder 2 ist, zeigt er auf den Anfang eines Einzelbyte-Zeichens, daher gibt die Funktion 1 zurück. Wenn der Index 3 ist, zeigt er auf den Anfang eines Zweibyte-Zeichens, und die Funktion gibt 2 zurück. Wenn der Index 4 ist, zeigt er auf die zweite Hälfte eines Zweibyte-Zeichens, und die Funktion gibt 1 zurück. Beachten Sie bitte, dass in diesem Beispiel die Elementgröße 1 ist. Einige Zeichen benötigen zwei Elemente und einige nur ein Element.
CharLength kann zum Suchen der Position von Multibyte-Zeichen in einem String verwendet werden.
Die folgende Funktion funktioniert auch mit Unicode-Zeichen:
var
U: UnicodeString;
L: Integer;
begin
U := 'abc';
L := SysUtils.CharLength(U,1); //gibt 2 zurück
L := SysUtils.CharLength(U,2); //gibt 2 zurück
U := #$20BB7; //Surrogatpaar
L := SysUtils.CharLength(U,1); //gibt 4 zurück
L := SysUtils.CharLength(U,2); //gibt 2 zurück
end.
Beachten Sie bitte, dass die Elementgröße in diesem Beispiel 2 ist, und das Surrogatpaarzeichen aus zwei Elementen besteht.
Wenn der String abc
ist, ist jedes Zeichen ein einzelnes Zweibyte-Element, daher gibt die Funktion 2 zurück. String-Literale sind per Vorgabe Unicode.
Bei dem Surrogatpaar zeigt der Index 1 auf das erste Element in dem Zeichen, daher gibt die Funktion 4 zurück. Wenn der Index 2 ist, zeigt er auf das zweite Element in dem Zeichen und gibt 2 zurück.