Файлы и UNICODE

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

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

Ответить
Аватара пользователя
alek111
новенький
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Файлы и UNICODE

Сообщение alek111 »

Среди LCL модулей нашел модуль FileUtil, в котором есть функции манипулирования файлами с названиями в UTF8. Судя по всему, он корректно работает с любыми символами в названиях файлов, независимо от локали. (Эксперименты с Лазарем подтверждают)
Есть ли что-то подобное для ввода-вывода??? Главное условие - корректная работа с именами файлов, с любыми символами в названии/пути.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Пользуйся фукциями Utf8ToSys/SysToUtf8, которые преобразуют строку в совместимую с RTL в зависимости от платформы.
Аватара пользователя
alek111
новенький
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Сообщение alek111 »

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

Как я уже писал, на WinNT такой номер не проходит т.к. RTL использует ANSI версии WinAPI функций, а мне нужна поддержка не только символов локали, но и других символов.
Пример: локаль win1251, а нужны символы из win1250, win1251 и win 1252.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Импользуй функции WinApi напрямую!
Аватара пользователя
alek111
новенький
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Сообщение alek111 »

Так и делаю, только это как-то некошерно. Переносимость отсутствует как класс. Да и геморроя на порядок больше. Отсюда и вопрос. Если есть модуль для манипулирования файлами с UTF-8, нету ли такого-же модуля для ввода-вывода?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Пока нет. Возможно к версии так fpc 2.4.* появится :wink:
Павел Ишенин
постоялец
Сообщения: 475
Зарегистрирован: 24.03.2007 09:16:52

Сообщение Павел Ишенин »

Если бы еще хоть кто-то этим занимался сейчас в fpc :(
Аватара пользователя
alek111
новенький
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Сообщение alek111 »

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

Так я же не про fpc. Модуль FileUtil, для манипуляции файлами, входит в LCL, поэтому в теме про Lazarus и спрашиваю. Может в LCL есть и модуль для ввода/вывода, а я невнимательно смотрел???
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

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;
Аватара пользователя
alek111
новенький
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Сообщение alek111 »

Похоже вы правы :-(
Вот такая она, поддержка юникода.
Ответить