Использование кодовых страниц 866 и 1251 неактуально, если ставится цель поддержка разных алфавитов разных языков. Юникод нам в помощь? Да, его первая версия была 16-битной и позволяла пользоваться почти всеми языками мира. Юникод 1.0 оставил за бортом языки, уже исчезнувшие (типа шумерской письменности), а так же языки, на которых разговаривает сотня человек. Ну и редко используемые иероглифы. Т.е. 16-битные символы должны были устроить почти всех. Но если бы не устраивали, можно было перейти на 32-битные символы. Язык Эйфория так и делает: все строки там – это массивы 32-битных чисел.
Все было бы идеально в этом несовершенном мире, пока янки не заметили, что в строках содержится слишком много(по их мнению) нулей. Оно и не мудрено, ведь они пользовались латиницей, а двухбайтовая латиница выглядит как ‘00xx’. Пользуйся они кириллицей, они бы и не увидели этих нулей. И янки решили сэкономить: пусть латиница занимает 1 байт, а кому нужен другой алфавит, пусть пользуется 2, 3, 4, 6 байтовыми последовательностями. Так появился UTF.
И вот Юникод превратился в такую же ерунду, что и UTF. Невозможно теперь обратиться к 19 символу строки: array[19]. Чтобы узнать количество символов в строке, нужно провести её парсинг разбор. А уж если строку читать с конца, то без стакана не разберёшься, какой символ впереди.
Существует такое напутствие программистам: «Программу надо писать, представляя, что ею будет пользоваться маньяк, который знает ваш домашний адрес». Как же мне хочется узнать домашний адрес авторов этих нововведений, которые не удосужились сделать размер всех символов одинаковым. Не знаю, что больше чешется: язык ли, чтобы сказать всё, что думаешь. Или руки, чтобы это же показать жестами.
Или можно на всё забить и использовать Юникод-16, наплевав на то, что может встретиться шумерская письменность?