Проблема с кодировкой фолдера на Windows.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Sergey1979
незнакомец
Сообщения: 4
Зарегистрирован: 13.05.2022 07:44:41

Проблема с кодировкой фолдера на Windows.

Сообщение Sergey1979 »

Привет!
Написал программу для запуска Java. Использовал Free Pascal 3.2.2 и Windows 11.

Код: Выделить всё

program project1;
uses
  ShellApi, SysUtils;
var
  JRE_Folder, JAR_Folder: String;
{$R *.res}
begin
  JRE_Folder := GetCurrentDir + '\JRE\bin\javaw.exe';
  JAR_Folder := GetCurrentDir + '\JavaProgram.jar';
  ShellExecute(0, 'open', PChar(JRE_Folder), PChar('-jar "' + JAR_Folder + '"'), nil, 1);
end.
Работает исправно, только если фолдер запуска на английском, если переименовать на русский или др. язык, то ничего не запускает. Наверно, неправильно определяет текущий фолдер GetCurrentDir.
Прбовал

Код: Выделить всё

{$codepage UTF8}
также пробовал

Код: Выделить всё

PWideChar(UTF8Decode(GetCurrentDir))
не помогло.
Как временное решение, запретил пользователю переименовывать фолдер запуска.
Пожалуйста, подскажите, что можно сделать?
xchgeaxeax
постоялец
Сообщения: 207
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

Используйте WideString, а не UTF8String. И PWideChar(UTF8Decode(GetCurrentDir)) работать не будет т.к. PWideChar не приводится к UTF8String без преобразования.
WideString это UTF16-LE, а не UTF8. Для работы с UTF16-LE в Windows давно есть функции с суффиксом W, а вот UTF8 она осваивать только начала и то не без проблем.
Sergey1979
незнакомец
Сообщения: 4
Зарегистрирован: 13.05.2022 07:44:41

Сообщение Sergey1979 »

Спасибо!
Перешел на ShellExecuteW и использую WideString.
Заработало.
Ответить