Здравствуйте, любители юникода.
Довольно часто в обсуждениях мне приходилось видеть утверждение, что надо пользоваться языками программирования с встроенной поддержкой юникода. В пример приводился, например, Rust.
Однако, Rust слишком моден и молодёжен. Хочется чего-то более проверенного временем. И решил я тут посмотреть как с поддержкой юникода у Free Pascal Compiler'а. То, что эта поддержка есть, было видно по документации, но по всей этой документации, статьям, сообщениям на форумах и практической работе складывалось впечатление, что эта поддержка только поверхностна, и всё равно придётся работать с отдельными байтами. Вероятно, многие кто с этим сталкивался думают также. Однако, решение есть! Чтобы его откопать мне пришлось много всего перелопатить, но я его нашёл.
program strutftest;
{$codepage UTF8}
uses cwstring;
var
s1: UnicodeString;
s2: UnicodeString;
begin
s1 := 'линуксоиды';
s2 := Copy(s1, 1, 6);
writeln(s2);
s2 := 'т' + Copy(s1, 4, 3);
writeln(s2);
s2 := UTF8String(#$CE#$B1#$CE#$B2#$CE#$B3#$CE#$B4);
writeln(s2);
writeln(pos('ксоид', s1));
s2 := Copy(s1, 1, 6);
delete(s1, 1, 6);
insert('гуман', s1, 1);
insert(' тоже любят ', s1, 10);
insert(s2, s1, 22);
writeln(s1);
end.
$ ./strutftest
линукс
тукс
αβγδ
5
гуманоиды тоже любят линукс
{$codepage UTF8}
uses cwstring;