С кодировками мутная тема.
Есть функция
{4} Procedure DrawText(X, Y: Integer; Text: PChar; ForeColor, BackColor, Flags, Count: Dword); StdCall; External 'KolibriOS';
она принимает во Flags спецификаторы кодировки
(* Charset specifiers for DrawText *)
DT_CP866_6X9 = $00000000;
DT_CP866_8X16 = $10000000;
DT_UTF_16LE_8X16 = $20000000;
DT_UTF_8_8X16 = $30000000;
Путь приложения записывается ядром только в UTF-8 http://board.kolibrios.org/viewtopic.php?f=2&t=3429
Насчёт файловых путей, из документации
Можно указать кодировку строки, поместив в её начале байт со значениями:
* 1 = cp866
* 2 = UTF-16LE
* 3 = UTF-8
иначе будет использоваться кодировка cp866. В абсолютном пути можно
поместить этот байт после '/' или добавить дополнительный '/' перед ним.
я не припомню, чтобы кто-то всерьёз использовал такой способ, и вообще имхо это не лучший вариант.
Ещё есть эти функции
{21.5} Function SetSystemLanguage(SystemLanguage: Dword): Integer; StdCall; External 'KolibriOS';
* Язык системы - глобальная системная переменная, никак
не используемая самим ядром, однако приложение @taskbar рисует
соответствующую иконку.
* Проверок на корректность не делается, поскольку ядро эту
переменную не использует.
{21.2} Function SetKeyboardLayoutCountry(Country: Dword): Integer; StdCall; External 'KolibriOS';
* Идентификатор страны - глобальная системная переменная, которая
самим ядром не используется; однако приложение @taskbar отображает
соответствующую текущей стране иконку.
* Приложение @taskbar переключает раскладки по запросу пользователя.
Некоторые программы ещё используют библиотеку iconv.obj для перекодировки.