Я не пробовал Delphi 2009, но использую fpc, который также медленно переключается на Unicode. Я на 95% уверен, что все приведенное ниже относится и к Delphi 2009
В fpc (при поддержке юникода) так будет, чтобы функции типа length учитывали кодовую страницу. Таким образом, он вернет длину строки так, как ее увидит «человек». Если есть, например, два китайских символа, которые занимают два байта памяти в юникоде, length вернет 2, поскольку в строке два символа. Но строка займет 4 байта памяти. (+ память для подсчета ссылок и ведущего # 0, но это в стороне)
То, что вы больше не можете делать, это:
var p : pchar;
begin
p := s[1];
for i := 0 to length(string)-1 do
begin
write(p);
inc(p);
end;
end;
Поскольку этот код - в примере с двумя китайскими символами - напишет неправильные два символа. А именно два байта, которые являются частью первого «реального» символа.
Вкратце: Length () больше не возвращает количество байтов, выделенных для строки, а количество символов. (До перехода на Unicode эти два значения были равны друг другу)