Файлы и UNICODE

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

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

Файлы и UNICODE

Сообщение alek111 » 24.06.2009 18:24:56

Среди LCL модулей нашел модуль FileUtil, в котором есть функции манипулирования файлами с названиями в UTF8. Судя по всему, он корректно работает с любыми символами в названиях файлов, независимо от локали. (Эксперименты с Лазарем подтверждают)
Есть ли что-то подобное для ввода-вывода??? Главное условие - корректная работа с именами файлов, с любыми символами в названии/пути.
Аватара пользователя
alek111
новенький
 
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Re: Файлы и UNICODE

Сообщение Mr.Smart » 24.06.2009 20:01:23

Пользуйся фукциями Utf8ToSys/SysToUtf8, которые преобразуют строку в совместимую с RTL в зависимости от платформы.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Файлы и UNICODE

Сообщение alek111 » 24.06.2009 21:05:12

Mr.Smart писал(а):Пользуйся фукциями Utf8ToSys/SysToUtf8, которые преобразуют строку в совместимую с RTL в зависимости от платформы.

Как я уже писал, на WinNT такой номер не проходит т.к. RTL использует ANSI версии WinAPI функций, а мне нужна поддержка не только символов локали, но и других символов.
Пример: локаль win1251, а нужны символы из win1250, win1251 и win 1252.
Аватара пользователя
alek111
новенький
 
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Re: Файлы и UNICODE

Сообщение Mr.Smart » 24.06.2009 21:11:55

Импользуй функции WinApi напрямую!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Файлы и UNICODE

Сообщение alek111 » 24.06.2009 21:43:11

Так и делаю, только это как-то некошерно. Переносимость отсутствует как класс. Да и геморроя на порядок больше. Отсюда и вопрос. Если есть модуль для манипулирования файлами с UTF-8, нету ли такого-же модуля для ввода-вывода?
Аватара пользователя
alek111
новенький
 
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Re: Файлы и UNICODE

Сообщение Mr.Smart » 24.06.2009 22:04:05

Пока нет. Возможно к версии так fpc 2.4.* появится :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Файлы и UNICODE

Сообщение Павел Ишенин » 25.06.2009 07:00:18

Если бы еще хоть кто-то этим занимался сейчас в fpc :(
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Файлы и UNICODE

Сообщение alek111 » 25.06.2009 08:42:01

Mr.Smart писал(а):Пока нет. Возможно к версии так fpc 2.4.* появится :wink:

Так я же не про fpc. Модуль FileUtil, для манипуляции файлами, входит в LCL, поэтому в теме про Lazarus и спрашиваю. Может в LCL есть и модуль для ввода/вывода, а я невнимательно смотрел???
Аватара пользователя
alek111
новенький
 
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Re: Файлы и UNICODE

Сообщение Mr.Smart » 25.06.2009 08:51:51

alek111 писал(а):
Mr.Smart писал(а):Пока нет. Возможно к версии так fpc 2.4.* появится :wink:

Так я же не про fpc. Модуль FileUtil, для манипуляции файлами, входит в LCL, поэтому в теме про Lazarus и спрашиваю. Может в LCL есть и модуль для ввода/вывода, а я невнимательно смотрел???

Так дело в том, что данный модуль является лишь обёрткой для функций и классов FCL. Т.е. производится преобразование имени файла в соттветствие с поддержкой RTL и затем вызов из FCL :wink:
Посмотрите исхожник...
Код: Выделить всё
function ReadFileToString(const Filename: String): String;
var
  fs: TFileStream;
begin
  Result := '';
  try
    fs := TFileStream.Create(UTF8ToSys(Filename), fmOpenRead or fmShareDenyWrite);
    try
      Setlength(Result, fs.Size);
      if Result <> '' then
        fs.Read(Result[1], Length(Result));
    finally
      fs.Free;
    end;
  except
    Result := '';
  end;
end;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Файлы и UNICODE

Сообщение alek111 » 25.06.2009 10:42:59

Похоже вы правы :-(
Вот такая она, поддержка юникода.
Аватара пользователя
alek111
новенький
 
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru