Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi Windows-Kompatibilität von Strings erhalten (https://www.delphipraxis.net/188597-windows-kompatibilitaet-von-strings-erhalten.html)

QuickAndDirty 19. Mär 2016 11:39

Windows-Kompatibilität von Strings erhalten
 
Hallo!

Ich Schreibe eine Anwendung für Android und IOs und Windwos Desktop. Die App soll auf Desktops laufen um leicht präsentierbar zu sein. Und auch auf Windows Tabletts zuhause sein.

Jetzt wo ich die Kommunikation der App angehe stoße ich auf ein Problem.

Die AnsiStrings.

Ich habe mir das angesehen wenn ich die in 0-basierte ByteArrays umwandle geht das alles...nicht mehr auf dem Desktop,
denn da verhalten sich "String" Variablen 1-basiert.

Gibts ne Möglichkeit die Stringvariablen auf dem Windows Desktop auch 0-basiert zu machen?

Ich würde gerne weitgehend einen einzigen Code für alle Zielplattformen Entwickeln.

mkinzler 19. Mär 2016 11:59

AW: Windows-Kompatibilität von Strings erhalten
 
Verwende den record helper für den Stringtyp.

QuickAndDirty 19. Mär 2016 12:30

AW: Windows-Kompatibilität von Strings erhalten
 
Zitat:

Zitat von mkinzler (Beitrag 1333346)
Verwende den record helper für den Stringtyp.

Das gedachte ich zu tun, wenn du den TStringHelper meintest.
Ich muss also alle Copy, Replacestring, Delete &c aufrufe durch passende aus tStringhelper ersetzen.

Also werde ich um zwei konvertierungsmethoden für ByteArrays nicht rum kommen, je nach dem ob es 0-based strings oder 1-bases strings sind.

Dann fehlen noch all die lieb gewonnenen String-Manipulations Methoden für Bytearrays....
Wo kann ich da protestieren?

mkinzler 19. Mär 2016 12:35

AW: Windows-Kompatibilität von Strings erhalten
 
Der Helper sollte die Unterschiede zwischen den Plattformen berücksichtigen und unabhängig von ihnen immer das selbe Ergebnis liefern.

QuickAndDirty 21. Mär 2016 16:27

AW: Windows-Kompatibilität von Strings erhalten
 
Wenn ich in TIDContext.IOHandler.DefStringEncoding
Beides mal ASCIIencoding habe. Was lese ich dann in der Mobile-App mit dem TIDContext.IOHandler.Readln Befehl aus?

Ist das Ergebnis ein String mit mit 2 Byte für jedes Byte im Ascii-String der von Windows gesendet wurde?
Oder ist da Ergebnis ein Unicode String der jeweils zwei Original Ascii Zeichen in ein Unicodezeichen codiert?
Wenn es ersteres ist, was ist dann mit Zeichen die garnicht Teil des Ascii codes sind,
wie "ÖÄÜ" die sind ja durch codepage 1252 Kodiert, aber diese angaben kann ich bei Indy nicht machen, oder?

himitsu 21. Mär 2016 16:42

AW: Windows-Kompatibilität von Strings erhalten
 
Delphi-Quellcode:
Low(string) = 0 oder 1
oder man könnte das "komische" neue Verhalten einfach abschalten
Delphi-Quellcode:
{$ZEROBASEDSTRINGS ON/OFF}
:stupid:

Bambini 21. Mär 2016 16:50

AW: Windows-Kompatibilität von Strings erhalten
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1333487)
Wenn ich in TIDContext.IOHandler.DefStringEncoding
Beides mal ASCIIencoding habe. Was lese ich dann in der Mobile-App mit dem TIDContext.IOHandler.Readln Befehl aus?

Ist das Ergebnis ein String mit mit 2 Byte für jedes Byte im Ascii-String der von Windows gesendet wurde?
Oder ist da Ergebnis ein Unicode String der jeweils zwei Original Ascii Zeichen in ein Unicodezeichen codiert?
Wenn es ersteres ist, was ist dann mit Zeichen die garnicht Teil des Ascii codes sind,
wie "ÖÄÜ" die sind ja durch codepage 1252 Kodiert, aber diese angaben kann ich bei Indy nicht machen, oder?

Wenn es Cross-Encoding gehen soll, würde ich die Strings immer im UTF8 Encoding versenden.

QuickAndDirty 24. Mär 2016 14:04

AW: Windows-Kompatibilität von Strings erhalten
 
Danke, euch allen.
Ich habe die String-Behandlung jetzt komplett auf den TStringhelper umgestellt.
Und einige coole Abkürzungen bietet der auch noch.(Split & Joyn Hallelulja, EndsWith, Startwith, Trim(['"']) usw.)
MeinString.Chars[0] liefert ja auf allen Plattformen das erste Zeichen usw.

Indy war kein so großes Problem wie angenommen. Auf das Encoding des Servers habe ich keinen Einfluss, aber wenn man es als AsciiEncoding empfängt liefert Readln im Client dennoch einen brauchbaren Unicodestring.


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