Кажется имеется ошибка в TStringList при сортировке русского текста.
Строю простейшее приложение с двумя TMemo и кнопкой. Вот код:
procedure TForm1.Button1Click(Sender: TObject);
var
strList: TStringList;
begin
strList:= TStringList.Create;
strList.Duplicates:= dupAccept;
strList.AddStrings(Memo1.Lines);
strList.Sort;
Memo2.Clear;
Memo2.Lines.AddStrings(strList);
strList.Free;
end;
В Memo1 ввожу фамилии:
Аршавин
Погребняк
Быстров
В Memo2 строки выводятся в виде:
Быстров
Аршавин
Погребняк
В Delphi (CodeGear RAD Studio 2009) этот же код работает правильно.
Уважаемые эксперты, что скажете?
Прежде чем отправлять сообщение об ошибке в lazarus bugtracker, хотелось бы посоветоваться
со знающими людьми.
Сортировка русского текста. Баг в TStringList?
Модератор: Модераторы
Kubanych
По умолчанию TStringList использует следующую функцию, которая работает с чистыми Ansi строками, а в LCL используется кодировка UTF-8
стандартная функция
Можно воспользоваться методом CustomSort передав ему в качестве параметра свою функцию проверки на равенство.
На пример:
з.ы. Я это багом не считаю!
По умолчанию TStringList использует следующую функцию, которая работает с чистыми Ansi строками, а в LCL используется кодировка UTF-8
стандартная функция
Код: Выделить всё
Function TStringList.DoCompareText(const s1,s2 : string) : PtrInt;
begin
if FCaseSensitive then
result:=AnsiCompareStr(s1,s2)
else
result:=AnsiCompareText(s1,s2);
end;
Можно воспользоваться методом CustomSort передав ему в качестве параметра свою функцию проверки на равенство.
На пример:
Код: Выделить всё
function MyFunc(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result:=WideCompareText(UTF8Decode(List[Index1]),UTF8Decode(List[Index2]));
end;
....
List.CustomSort(@MyFunc);
....
з.ы. Я это багом не считаю!
