Вопрос с символами unicode FileAgeUTF8
Модератор: Модераторы
Вопрос с символами unicode FileAgeUTF8
Здравствуйте.
2 вопроса:
1) В программе вывожу символ в одном из label.caption: ▲. на win7 выводится без проблем на xp вместо него выводит квадратик незаполненный.
Вопрос: в чем дело, как сделать чтобы на всех ОС выводил этот символ?
2) Если файл с русскими буквами и путем - тогда все нормально, но как быть, если например, в названии папки есть французские буквы.
Функция FileAgeUTF8 дает тогда -1?
Например: FileAgeUTF8('C:\é\1.jpg')
showmessage('C:\é\1.jpg') - выводит все правильно.
Всякие systoutf8 utf8decode - пробовал, но может не все.
Вопрос: как сделать, чтобы корректно сработало?
Ведь виндоуз сам нормально обрабатывает эти пути и символы - показывает и размер файла и т.д.
2 вопроса:
1) В программе вывожу символ в одном из label.caption: ▲. на win7 выводится без проблем на xp вместо него выводит квадратик незаполненный.
Вопрос: в чем дело, как сделать чтобы на всех ОС выводил этот символ?
2) Если файл с русскими буквами и путем - тогда все нормально, но как быть, если например, в названии папки есть французские буквы.
Функция FileAgeUTF8 дает тогда -1?
Например: FileAgeUTF8('C:\é\1.jpg')
showmessage('C:\é\1.jpg') - выводит все правильно.
Всякие systoutf8 utf8decode - пробовал, но может не все.
Вопрос: как сделать, чтобы корректно сработало?
Ведь виндоуз сам нормально обрабатывает эти пути и символы - показывает и размер файла и т.д.
Re: Вопрос с символами unicode FileAgeUTF8
1)каким образом вы выводите треугольник?
2) что показывает, к примеру:
?
2) что показывает, к примеру:
Код: Выделить всё
Label1.Caption := OpenDialog1.FileName- Vapaamies
- постоялец
- Сообщения: 292
- Зарегистрирован: 24.07.2012 22:37:59
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Вопрос с символами unicode FileAgeUTF8
poiuyt555 писал(а):ЗВопрос: как сделать, чтобы корректно сработало?
Попробовать установить поддержку азиатских языков на XP. Мне помогло с выводом стрелочки → в меню.
Установка азиатчины добавляет не только шрифты, но и дополнительные правила подстановки шрифтов в GDI. В наших случаях, скорее всего, срабатывает именно это. В Windows 7 поддержка азиатских языков стоит уже из коробки (часто помимо желания обычных пользователей, но на радость анимешникам), поэтому все и работает. Если вывод спецсимвола настолько критичен и установка азиатчины решит проблему, можно поставить в обязательные требования к программе.
Re: Вопрос с символами unicode FileAgeUTF8
Треугольник выводим: label1.caption:='▲'; или сразу в инспекторе объектов.
Label1.Caption := OpenDialog1.FileName; - выводит правильный путь: 'C:\é\1.jpg'
То есть вопрос: как корректно работать с файлом в пути , или в имени которого есть буквы других алфавитов (не рус и анг.)?
Label1.Caption := OpenDialog1.FileName; - выводит правильный путь: 'C:\é\1.jpg'
То есть вопрос: как корректно работать с файлом в пути , или в имени которого есть буквы других алфавитов (не рус и анг.)?
Re: Вопрос с символами unicode FileAgeUTF8
В чем-то похожая проблема (по пункту 2) описана здесь.
Re: Вопрос с символами unicode FileAgeUTF8
1. Т.е. просто копи-пасте, а не код символа, в этом, возможно и проблема.
если у Вас будет квадрат, то ... я прав 
2. Если OpenDialog1.FileName показывает правильный путь значит:
По крайней мере у меня: "..\aaf_(привет#_2@ttіііі\файл" и тому подобные открываются.
Кстати: данный вопрос уже был на форуме
п.с. Если Вы работаете с ютф то, у Вас все должно быть ютф (хотя первоначально может быть какое угодно). А что бы узнать что Вам показывает лазарь выводите на экран. Хоть в лазаре ютф но не все...
Код: Выделить всё
Label2.Caption := Char(19) + ' hhhhhhhhhh';2. Если OpenDialog1.FileName показывает правильный путь значит:
не так пробывали, возможно надоВсякие systoutf8 utf8decode - пробовал, но может не все.
Код: Выделить всё
строка := UTF8ToSys(OpenDialog1.FileName)По крайней мере у меня: "..\aaf_(привет#_2@ttіііі\файл" и тому подобные открываются.
Кстати: данный вопрос уже был на форуме
п.с. Если Вы работаете с ютф то, у Вас все должно быть ютф (хотя первоначально может быть какое угодно). А что бы узнать что Вам показывает лазарь выводите на экран. Хоть в лазаре ютф но не все...
Re: Вопрос с символами unicode FileAgeUTF8
1) да по копи-паст. Была мысль вставлять по коду символа, но это, как я понимаю, utf-символ.
Какой командой вывести данный символ по коду?
2) UTF8ToSys UTF8ToAnsi - не помогают - все равно -1.
Выяснил!: команда FileSize - КОРРЕКТНО работает и возвращает правильный размер с таким путем, а FileAge или FileAgeUTF8 - не "понимают" такой путь.
То есть, видимо, можно как-то сделать, чтобы корректно такие пути обрабатывались.
Какой командой вывести данный символ по коду?
2) UTF8ToSys UTF8ToAnsi - не помогают - все равно -1.
Выяснил!: команда FileSize - КОРРЕКТНО работает и возвращает правильный размер с таким путем, а FileAge или FileAgeUTF8 - не "понимают" такой путь.
То есть, видимо, можно как-то сделать, чтобы корректно такие пути обрабатывались.
Re: Вопрос с символами unicode FileAgeUTF8
poiuyt555 писал(а):2) UTF8ToSys UTF8ToAnsi - не помогают
Вы все таки уясните для себя, что эти функции делают. А именно - преобразование из UTF в пределах таблиц преобразования, действующих в текущей локали операционной системы. Все знаки, находящиеся за пределами, либо будут выброшены, либо преобразованы в знак вопроса.
Давайте все таки запустим отладчик, и после каждого преобразования будем смотреть на результаты, тогда все прояснится.
И, пожалуйста, сообщите сообществу наконец unicode код вашей злосчастной буковки, а то даже и повторить задачу при желании не удастся.
Re: Вопрос с символами unicode FileAgeUTF8
Нашел на каком-то сайте ее код:
é
Латинская строчная буква e с актом
Номер в юникоде: 00E9
é
Латинская строчная буква e с актом
Номер в юникоде: 00E9
Re: Вопрос с символами unicode FileAgeUTF8
ыыы...
Опаньки, я был прав
Операция FindFirst, через которую производится поиск файла с указанным именем в реализации функции FileAge, неспособна возвратить в названии каталога и файла символы, не относящиеся к текущей локали операционной системы
Ради интереса можете скомпилировать и запустить в интересующих каталогах
смотрим на шестнадцатиричное представление справа. У меня это, впрочем, нестабильный fpc, проверьте пожалуйста на релизном 2.6.0
Опаньки, я был прав
Операция FindFirst, через которую производится поиск файла с указанным именем в реализации функции FileAge, неспособна возвратить в названии каталога и файла символы, не относящиеся к текущей локали операционной системы
Ради интереса можете скомпилировать и запустить в интересующих каталогах
Код: Выделить всё
Program Example43;
{$mode objfpc}
{$H+}
Uses SysUtils;
Var Info : TSearchRec;
Count : Longint;
function NameToHex(name:string):string;
Var i:integer;
begin
result:='';
for i:=1 to length(name) do begin
result:=result+format(' %x',[ord(name[i])]);
end;
end;
Begin
Count:=0;
If FindFirst ('*',faAnyFile and faDirectory,Info)=0 then
begin
Repeat
Inc(Count);
With Info do
begin
If (Attr and faDirectory) = faDirectory then
Write('Dir : ');
Writeln (Name:40,Size:15,NameToHex(Name):60);
end;
Until FindNext(info)<>0;
end;
FindClose(Info);
Writeln ('Finished search. Found ',Count,' matches');
End.
смотрим на шестнадцатиричное представление справа. У меня это, впрочем, нестабильный fpc, проверьте пожалуйста на релизном 2.6.0
Re: Вопрос с символами unicode FileAgeUTF8
э:
путь к файлу "...\Sergey.Sin.Привіт#$\файл", Label2.Caption > 1. Что я сделал не так?
Код: Выделить всё
if OpenDialog1.Execute then begin
Label2.Caption := IntToStr(FileAgeUTF8(OpenDialog1.FileName));
end;путь к файлу "...\Sergey.Sin.Привіт#$\файл", Label2.Caption > 1. Что я сделал не так?
Re: Вопрос с символами unicode FileAgeUTF8
amateur писал(а):Что я сделал не так?
Я, например использовал #$E2#$E5#$E8#$E6 (âåèæ)
Re: Вопрос с символами unicode FileAgeUTF8
ээ:
фпс 2.6.0 лаз 1.1, семерка. Кажись система плоха
у меня возвращает...неспособна возвратить в названии каталога и файла символы
фпс 2.6.0 лаз 1.1, семерка. Кажись система плоха
Re: Вопрос с символами unicode FileAgeUTF8
Специально откомпилировал примерчик релизным 2.6.0. Результаты те же - конверсит âåèæ вот в это: aae? т.е. в hex: 61 61 65 3F
Под XP, кстати, имечко точно так же выглядит и для самой операционной системы. Так что уже нет обратной совместимости. Сама windows нормально отображает - âåèæ, FAR commander и Double Commander - тоже (под семеркой). Win 7 x64
Под XP, кстати, имечко точно так же выглядит и для самой операционной системы. Так что уже нет обратной совместимости. Сама windows нормально отображает - âåèæ, FAR commander и Double Commander - тоже (под семеркой). Win 7 x64
Re: Вопрос с символами unicode FileAgeUTF8
Операция FindFirst, через которую производится поиск файла с указанным именем в реализации функции FileAge, неспособна возвратить в названии каталога и файла символы, не относящиеся к текущей локали операционной системы
Получается, что в данном случае FileAge не подходит в принципе.
Тогда какая подходит? Может быть есть нужная winapi?
Думаю, что есть функции, которые могут работать с такими путями, так как во первых сама виндоуз корректно все отображает.
Кстати та же проблема с ShellExcecute - тоже не получается запустить с такими символами.
у меня возвращает...
То есть у вас поучилось удачно вывести дату по FileAge?
