Файлы и UNICODE
Модератор: Модераторы
Файлы и UNICODE
Среди LCL модулей нашел модуль FileUtil, в котором есть функции манипулирования файлами с названиями в UTF8. Судя по всему, он корректно работает с любыми символами в названиях файлов, независимо от локали. (Эксперименты с Лазарем подтверждают)
Есть ли что-то подобное для ввода-вывода??? Главное условие - корректная работа с именами файлов, с любыми символами в названии/пути.
Есть ли что-то подобное для ввода-вывода??? Главное условие - корректная работа с именами файлов, с любыми символами в названии/пути.
Пользуйся фукциями Utf8ToSys/SysToUtf8, которые преобразуют строку в совместимую с RTL в зависимости от платформы.
Mr.Smart писал(а):Пользуйся фукциями Utf8ToSys/SysToUtf8, которые преобразуют строку в совместимую с RTL в зависимости от платформы.
Как я уже писал, на WinNT такой номер не проходит т.к. RTL использует ANSI версии WinAPI функций, а мне нужна поддержка не только символов локали, но и других символов.
Пример: локаль win1251, а нужны символы из win1250, win1251 и win 1252.
Импользуй функции WinApi напрямую!
Так и делаю, только это как-то некошерно. Переносимость отсутствует как класс. Да и геморроя на порядок больше. Отсюда и вопрос. Если есть модуль для манипулирования файлами с UTF-8, нету ли такого-же модуля для ввода-вывода?
Пока нет. Возможно к версии так fpc 2.4.* появится 
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
Если бы еще хоть кто-то этим занимался сейчас в fpc 
Mr.Smart писал(а):Пока нет. Возможно к версии так fpc 2.4.* появится
Так я же не про fpc. Модуль FileUtil, для манипуляции файлами, входит в LCL, поэтому в теме про Lazarus и спрашиваю. Может в LCL есть и модуль для ввода/вывода, а я невнимательно смотрел???
alek111 писал(а):Mr.Smart писал(а):Пока нет. Возможно к версии так fpc 2.4.* появится
Так я же не про fpc. Модуль FileUtil, для манипуляции файлами, входит в LCL, поэтому в теме про Lazarus и спрашиваю. Может в LCL есть и модуль для ввода/вывода, а я невнимательно смотрел???
Так дело в том, что данный модуль является лишь обёрткой для функций и классов FCL. Т.е. производится преобразование имени файла в соттветствие с поддержкой RTL и затем вызов из FCL
Посмотрите исхожник...
Код: Выделить всё
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;Похоже вы правы 
Вот такая она, поддержка юникода.
Вот такая она, поддержка юникода.
