![]() |
Widestring
Hallo,
ich habe mal ne Frage. Ich möchte gerne von einem Widestring die einzelnen Character auslesen. Nun gibt es Unicodezeichen die bestehen aus 2 Words. #$D83D + #$DD12 zum Beispiel. Hat jemand ne Idee wie ich herausbekomme, dass die beiden Zeichen zu einem gehören? Sonst bekomme ich 2x Unsinn, wenn ich die Zeichen einzeln via String[1]..[n] auslese. Peter |
AW: Widestring
Vor 10 Jahren hätte ich noch gewusst wo ich bei mir den Code finde, jetzt habe ich ohne ewiges Suchen nur noch eine Idee. Die Bereiche für die einzelnen Bytes sind festgelegt, daran kann man sie erkennen.
![]() |
AW: Widestring
Bei Widestrings hat jeder Char eine fixe Größe (bei BSD 2006 sinds 2 Byte; Bei neueren 4 Byte).
Einfachste (und unabhängig von der Delphi/Cpu-Version):
Delphi-Quellcode:
Ungetestet und einfach aus dem Gedächtnis geschrieben :)
function FindCharInWidestring(str:widestring;toFind:widechar):integer;
var p : PWidechar; max: integer; begin result := -1; p := PWidechar(str); max := length(str); while (max >= 0) do begin if (p^ = toFind) then max := -1; else begin inc(p); inc(result); dec(max); end; end; end; |
AW: Widestring
Vielleicht mit
![]() |
AW: Widestring
oder natürlich einfach
![]() |
AW: Widestring
UTF-16 hat einen Vorteil, denn man kann mit Bitmasken prüfen ob ein Zeichen ein Einzelchar oder ein Surrogate und sogar ob es das erste oder zweite Char eines Surrogate ist.
Auch die user-definierten Chars lassen sich erkennen (auch wenn da keiner 'ne Ahnung hat, wie dieses Char interpretiert wird, abgesehn vom entsprechenden Programm, welches Diesen nutzt) Aber auch Sicht des Unicode sind jene Chars immer Einzelzeichen. CharNext macht da auch kein Hexenwerk.
Delphi-Quellcode:
function CharNext(Input: PWideChar): PWideChar;
begin Result := Input; Inc(Result, 1); if IsLastCharOfSurrogate(Reult) then Inc(Result, 1); // oder Result := Input; if IsFirstCharOfSurrogate(Reult) then Inc(Result, 2) else Inc(Result, 1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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