Wenn man auf WideString per s[i] zugreift ist i immer das i-te Zeichen im s (so lange korrekte UTF16-Daten im S vorliegen).
Nein. Surrogates bestehen aus 2 Zeichen (4 Byte).
Was in den "User defined character ranges" sich versteckt, dass weiß Keiner.
Ja, in Delphi fangen Strings bei 1 an, als Kompatibilität auf den ersten Delphi-Stringtypen (ShortString),
aber da sei Crossplatform können Strings plötzlich auch mal bei 0 anfangen (standardmäßig auf Android und iOS).