Налетел на проблему.
Смысл - работаю с uOpenOffice.
Открываю файл - электронную таблицу - для записи некоторых данных.
Поскольку есть русские буквы в пути, то для открытия документа использую FilePath := ConvertToURL(UTF8ToSys(FileName)) = 'file:///C:/CTO/
Закупки/2016_Март.ods'
Пока программа пишет в этот документ, всё в порядке.
Но как только я руками что-то там изменю и сохраню, то программа перестаёт видеть открытый файл, потому что имя файла становиться вот таким:
'file:///C:/CTO/
%D0%97%D0%B0%D0%BA%D1%83%D0%BF%D0%BA%D0%B8/2016_%D0%9C%D0%B0%D1%80%D1%82.ods'
Поскольку в uOpenOffice идёт проверка по имени файла, что определённый файл уже открыт, то проверка даёт False и возникает ошибка при попытке снова открыть открытый файл.
Никак не могу подобрать функцию преобразования.
Руками делать не хочется.
Кто-то знает, как преобразовать строку в приёмлемый результат?
GuessEncoding(V.URL) - и первом случае, и во втором - utf8
В первом случае - 'file:///C:/CTO/
Закупки/2016_Март.ods' - работа программы.
Во втором случае - 'file:///C:/CTO/
%D0%97%D0%B0%D0%BA%D1%83%D0%BF%D0%BA%D0%B8/2016_%D0%9C%D0%B0%D1%80%D1%82.ods' - после изменения и сохранение руками открытого программой документа.
Добавлено спустя 1 час 52 минуты 9 секунд:Блин, время поджимает, сделал наскоро, тупо перебором.
Благо, что редко вызов происходит. Не в цикле.
- Код: Выделить всё
var URLCode: array[1..132] of string =(
'Ё', '%d0%81', 'А', '%d0%90', 'Б', '%d0%91', 'В', '%d0%92', 'Г', '%d0%93', 'Д', '%d0%94', 'Е', '%d0%95', 'Ж', '%d0%96', 'З', '%d0%97', 'И', '%d0%98',
'Й', '%d0%99', 'К', '%d0%9a', 'Л', '%d0%9b', 'М', '%d0%9c', 'Н', '%d0%9d', 'О', '%d0%9e', 'П', '%d0%9f', 'Р', '%d0%a0', 'С', '%d0%a1', 'Т', '%d0%a2',
'У', '%d0%a3', 'Ф', '%d0%a4', 'Х', '%d0%a5', 'Ц', '%d0%a6', 'Ч', '%d0%a7', 'Ш', '%d0%a8', 'Щ', '%d0%a9', 'Ъ', '%d0%aa', 'Ы', '%d0%ab', 'Ь', '%d0%ac',
'Э', '%d0%ad', 'Ю', '%d0%ae', 'Я', '%d0%af', 'а', '%d0%b0', 'б', '%d0%b1', 'в', '%d0%b2', 'г', '%d0%b3', 'д', '%d0%b4', 'е', '%d0%b5', 'ж', '%d0%b6',
'з', '%d0%b7', 'и', '%d0%b8', 'й', '%d0%b9', 'к', '%d0%ba', 'л', '%d0%bb', 'м', '%d0%bc', 'н', '%d0%bd', 'о', '%d0%be', 'п', '%d0%bf', 'р', '%d1%80',
'с', '%d1%81', 'т', '%d1%82', 'у', '%d1%83', 'ф', '%d1%84', 'х', '%d1%85', 'ц', '%d1%86', 'ч', '%d1%87', 'ш', '%d1%88', 'щ', '%d1%89', 'ъ', '%d1%8a',
'ы', '%d1%8b', 'ь', '%d1%8c', 'э', '%d1%8d', 'ю', '%d1%8e', 'я', '%d1%8f', 'ё', '%d1%91');
function TestUTF(const S: String): String;
var i, k, l: Integer;
begin
Result := LowerCase(S);
i := 1;
while i < High(URLCode) do begin
Result := ReplaceStr(Result, URLCode[i+1], URLCode[i]);
i += 1;
end;
end;