Sergei I. Gorelkin писал(а):widestring использует кодировку utf-16, в которой символ может занимать 2 или 4 байта. В utf-8 - от 1 до 4 байт. Если делать "как положено" (с поддержкой всего диапазона unicode), то принципиальной разницы между ними нет, доступ по индексу невозможен ни там ни сям.
WideString-и имеют преймущество, именно потому, что доступ по индексу возможен.
4-х байтовые символы - сурогатные пары. На письме не используются (есть ли примеры исползования?!)...
всегда можно сделать проверку (например при чтении строки из файла, сети или откуда угодно), и при необходимости, заменить все сурогатные символы (пары), на "несуществующий" символ. (как делали/делают многие современные системы)
Собственно, utf-16 кодировку составили именно так, чтобы любой все "часто использующиеся" символы (все символы, всех актуальных на сегодняшний день языков), умещались в 2 байта.
При такой политике, можно смело использовать доступ по индексу.
Кроме того, WideString используется как базовый строковый тип для систем Windows и MacOSX (за Linux говорить не буду). Если WideString являлся "стандартом" для LCL, то количество конвертаций строк, для этих двух систем было бы меньше. Было бы меньше путаницы с кодировками в Windows (и KOIR Linux), потому что нужно помнить, что для LCL string это UTF8, а для FCL string это ANSI. + Учитывать что старые исходники наверное в ansi, а новые исходники в utf8.
Но т.к. кода написано немало (програм на базе LCL и FCL), менять всё на WideString будет весьма болезненно.