Заблудился с кодировкой

Вопросы программирования и использования среды Lazarus.

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

Заблудился с кодировкой

Сообщение grigoreo » 30.03.2009 11:25:23

есть компонент TSdfDataSet , но файл подключается к нему в зависимости от пользоваетеля зашедшего в систему Windows , вычисляется папка профиля и далее там будет лежать файл,

cfgD.FileName:=Application.EnvironmentVariable['userprofile']+'\file.ini';

все хорошо пока папки профилей пользователей англоязычные а при рускоязычных он ругается что файл такой то не найден и пишет заместо руского имени абракадабру,(версия лазаруса 0.9.27 мартовская) понимаю что надо сделать преобразование но не пойму какое AnsiToUTF8 не помогло в какой кодировке нужен TSdfDataSet имя файла я так понимаю имя файла которое выплевывает EnvironmentVariable['userprofile'] анси...

кто знает как это бороть?
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: Заблудился с кодировкой

Сообщение Vadim » 30.03.2009 11:35:44

Система Windows работает либо с ANSI кодировкой, либо с Unicode. Lazarus работает с кодировкой UTF-8. Отсюда логический вывод - надо системную кодировку преобразовать в UTF-8 :
SysToUTF8(Путь_и_имя_файла);
Это можно делать для всех путей, т.к. функция SysToUTF8() достаточно интеллектуальная и если преобразование ненужно, она его не делает.
На тот случай, если что-то посылается в систему, то наоборот:
UTF8ToSys()
чтобы система поняла, с каким файлом она будет работать.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Заблудился с кодировкой

Сообщение grigoreo » 30.03.2009 13:31:27

Vadim писал(а):Система Windows работает либо с ANSI кодировкой, либо с Unicode. Lazarus работает с кодировкой UTF-8. Отсюда логический вывод - надо системную кодировку преобразовать в UTF-8 :
SysToUTF8(Путь_и_имя_файла);
Это можно делать для всех путей, т.к. функция SysToUTF8() достаточно интеллектуальная и если преобразование ненужно, она его не делает.
На тот случай, если что-то посылается в систему, то наоборот:
UTF8ToSys()
чтобы система поняла, с каким файлом она будет работать.


Чет неподошло в ошибке пишет что не может найти имя файла выводимую абракадабру не поменял, даже символы теже
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: Заблудился с кодировкой

Сообщение Vadim » 30.03.2009 13:56:38

А, это я тоже ошибся с направлением перекодировки. :)
Вот так вот правильно, я проверил:
cfgD.FileName:=UTF8ToSys(Application.EnvironmentVariable['userprofile']+'\file.ini');
Что мы делаем? Мы обращаемся к операционной системе за файлом, следовательно нам надо преобразовать русский текст из UTF-8 в системную кодировку.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

Рейтинг@Mail.ru