![]() |
gibt es Utf16 Äquivalente zu Ord und Chr
Hab nur Delphi2007, deshalb die Frage, gibt es Utf16 Äquivalente zu Ord und Chr? Da gibt es doch diese neue TCharacter class?
|
AW: gibt es Utf16 Äquivalente zu Ord und Chr
Ord passt sich an den Quell-Datentyp an (egal welcher ordinaler Typ das ist ... AnsiChar, WideChar, Enum usw.)
und Chr hängt vom Compiler ab. (genauso wie bei Char) Genauso, wie im ANSI, arbeiten diese Funktionen immer nur auf einzelnen Chars/Speichereinheiten und nicht auf komplexeren "MultiBytes". Im AnsiString also nur auf einem Byte (AnsiChar) und im Unicode nur auf einem Word (WideChar). Mit sowas wie UTF-8 oder den Surrogates kommen diese Befehle nicht klar und interpretieren natürlich nur die einzelne Chars und nicht komplette "Zeichen". Somit ist seit Delphi 2009 das Chr oder Char ein WideChar und vorher war es ein AnsiChar. Und beim Ord hat sich mit Delphi 2009 garnichts geändert. |
AW: gibt es Utf16 Äquivalente zu Ord und Chr
Es muß doch eine IndexOfChar geben, um den aktuellen Windows Zeichensatz auszulesen, die (wesentlich) schneller als das ist?
Delphi-Quellcode:
TWideChar = packed record case Byte of 0: (Value: WideChar); 1: (Code: Word); end; function GetWideChr(const Code: word): WideChar; var WChar: TWideChar; begin WChar.Code := Code; Result := WChar.Value; end; function GetWideOrd(const Value: WideChar): integer; var I: integer; WChar: TWideChar; begin Result := -1; for I := 0 to 65535 do begin WChar.Code := I; if WChar.Value = Value then begin Result := I; Break; end; end; end; procedure TDoubleDiceEncryptionForm.Button1Click(Sender: TObject); var WChar: TWideChar; begin WChar.Code := 7888; MessageBoxW(Handle, PWideChar (WideFormat('%s = Code %d', [GetWideChr(WChar.Code), GetWideOrd(WChar.Value)])), 'Test', MB_ICONINFORMATION); end; |
AW: gibt es Utf16 Äquivalente zu Ord und Chr
Zitat:
U.U. ist der Font den du nutzt nicht Unicode tauglich? Gruß K-H |
AW: gibt es Utf16 Äquivalente zu Ord und Chr
Das müsste doch so einfach gehen:
Delphi-Quellcode:
procedure TDoubleDiceEncryptionForm.Button1Click(Sender: TObject);
var WChar: WideChar; begin WChar = #7888; MessageBoxW(Handle, PWideChar (WideFormat('%s = Code %d', [WChar, Ord(WChar)])), 'Test', MB_ICONINFORMATION); end; |
AW: gibt es Utf16 Äquivalente zu Ord und Chr
Keine Ahnung? Sieht aber korrekt aus. Thanx!
|
AW: gibt es Utf16 Äquivalente zu Ord und Chr
Zitat:
Delphi-Quellcode:
noch mehr gekürzt:
function GetWideOrd(const Value: WideChar): Integer;
var WChar: TWideChar; begin WChar.Value := Value; Result := WChar.Code; end;
Delphi-Quellcode:
noch bissl mehr:
function GetWideChr(const Code: word): WideChar;
var WChar: TWideChar absolute Code; begin Result := WChar.Value; end; function GetWideOrd(const Value: WideChar): Integer; var WChar: TWideChar absolute Value; begin Result := WChar.Code; end;
Delphi-Quellcode:
und jetzt total:
function GetWideChr(const Code: word): WideChar;
begin Result := TWideChar(Code).Value; end; function GetWideOrd(const Value: WideChar): Integer; begin Result := TWideChar(Value).Code; end;
Delphi-Quellcode:
function GetWideChr(const Code: word): WideChar;
begin Result := WideChar(Code); // oder Chr(Code) oder Char(Code) ... Beides natürlich erst ab D2009 end; function GetWideOrd(const Value: WideChar): Integer; begin Result := Ord(Value); end; |
AW: gibt es Utf16 Äquivalente zu Ord und Chr
OK. Ich war halt auch noch etwas verunsichert, weil Marco Cantu schreibt, man solle sich nicht wundern wenn Chr(128) und #128 in > D2007 unterschiedliche Werte liefert (liefern kann). Daß Chr in > D2007 WideChar entspricht hatte ich auch nicht bedacht. Das heißt, ich muß an meinem Code gar nichts ändern. Die Umstellung auf UniCode ist dann doch gar nicht soooo kompliziert? Vielleicht hol ich mir dann doch mal ein neues Delphi. Thanx!
|
AW: gibt es Utf16 Äquivalente zu Ord und Chr
Zitat:
Denn Nur die Zeichen von #0 bis #127 sind in allen Charsets gleich und stimmen 1:1 mit Unicode überein. Im ANSI sind aber die Zeichen von 128# bis #255 unterschiedlichen Unicodezeichen zugeordnet, je nach Charset. siehe z.B. die ä, ö und ü, welche es erstmal nicht in allen Ansi-Zeichensätzen gibt, oder die dort an anderer ordinaler Stelle liegen, als im Unicode. Abgesehn von ISO 8859-1, wo äöü an der selben Stelle liegen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 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