Есть Win2008 Server SR2 SP1 с системной кодировкой win-1252 (узнал при помощи winapi функции GetLocaleInfoA), язык интерфейса - русский. На Lazarus-е необходимо написать небольшую утилиту для запуска скриптов. Имена файлов на кириллице, т.е. win-1251. Вызов
- Код: Выделить всё
FindFirst(Utf8ToSys(<маска поиска, имя каталога содержит кириллицу>), faAnyFile, SearchResult);
repeat
FileName := SysToUTF8(SearchResult.Name);
ListBox.Items.Add(FileName);
until FindNext(SearchResult) <> 0;
не заполняет ListBox, в него попадает одна строка равная маске поиска, символы из кириллицы заменяются знаком вопроса. Системную кодировку на сервере поменять не можем, т.к. в этом случае перестает работать redmine, а спецов по рельсам у нас совсем нет. Изменение имен файлов скриптов на латиницу тоже невозможно по организационным причинам.
Не понятно какое нужно сделать преобразование кодировок, т.к. получается, что каталог поиска функцией FindFirst не находится. Если заменить маску поиска на каталог с латиницей, то файлы ищутся нормально. При этом в именах файлов символы кириллицы заменяются знаками вопроса, т.е. "FileName := SysToUTF8(SearchResult.Name);" тоже отрабатывает не так как надо.
Менял SysToUTF8/Utf8ToSys на Utf8ToAnsi/AnsiToUTF8, ничего не изменилось.
Подскажите, как можно решить описанную проблему? Может можно где-то выставить, чтобы ansi строки обрабатывались в кодировке win-1251?
Lazarus 1.0.2, fpc 2.6.0