Вопрос с символами unicode FileAgeUTF8

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

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

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение bormant » 10.12.2012 14:46:48

poiuyt555 писал(а):Нашел на каком-то сайте ее код:
é
Латинская строчная буква e с актом
Номер в юникоде: 00E9

Только не забывайте, что в utf8, в отличие от UCS2, этот символ кодируется как #$c3#$a9.
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение poiuyt555 » 10.12.2012 14:51:57

Только не забывайте, что в utf8, в отличие от UCS2, этот символ кодируется как #$c3#$a9.


А не подскажете, какой функцией:
1) Находить код символа utf8 по символу?
2) Обратное преобразование?

Как я понимаю, ord и chr в данном случае не работают.
poiuyt555
новенький
 
Сообщения: 51
Зарегистрирован: 12.09.2011 07:45:51

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение amateur » 10.12.2012 15:34:50

1. Треугольник. :) Жестокая вещь.... Мне проще его "отрисовать".
ord и chr
работают, только они стремные :). В принципе не должно быть того что Вы написали. Т.е. что добавили оно должно отобразить, но ...

http://radikal.ru/F/s017.radikal.ru/i424/1212/a1/a61115f6aa9f.png.html справа файл с русскими буквами пуст = 0 (брякозябы - стандарт поведение в консоли, не использовал ничего окромя Вашего кода).
Там где Прив?т стоит Привіт
Ткните носом в то что не правильно....

повторюсь:
Код: Выделить всё
if OpenDialog1.Execute then begin
    Label2.Caption := IntToStr(FileAgeUTF8(OpenDialog1.FileName));
  end;
Label2.Caption = 1099585372

Код: Выделить всё
if OpenDialog1.Execute then begin
    Label2.Caption := IntToStr(FileAge(OpenDialog1.FileName));
  end;
Label2.Caption = -1

где проблема?
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение SSerge » 10.12.2012 16:02:00

amateur писал(а):http://radikal.ru/F/s017.radikal.ru/i42 ... f.png.html справа файл с русскими буквами пуст = 0 (брякозябы - стандарт поведение в консоли, не использовал ничего окромя Вашего кода).
Там где Прив?т стоит Привіт
Ткните носом в то что не правильно....


Ну и где вы отображаете проблемные символы? Вы уж это запустите тогда уж в каталоге, который у вас ...proverka, и тогда мы посмотрит на возвращаемые коды вашего привiта; ну и для полноты картины, давайте все таки воссоздадим файл с именем из приведенных мною магических символов (подсказка - клепаются в буфер обмена из программки Character Map). А так то что - отображаете два каталога в которых файлов с проблемными именами нет. Тем более - оба текущие для программы.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение poiuyt555 » 10.12.2012 16:40:52

А в
привiта
- не могу понять, а посередине не i латинская?
Необходимо, чтобы был символ не текущей кодировки и не английский, напр, японская буква и т.д.
poiuyt555
новенький
 
Сообщения: 51
Зарегистрирован: 12.09.2011 07:45:51

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение amateur » 10.12.2012 17:02:28

SSerge фу, млин :)) ну и задачка... Один из плюсов лазаря. Есть почти все кодировки и почти все работают :)
1. Файлы и папки = CP1251 Так?*
2. cmd = CP866 (по крайней мере у меня) Так?
3. нарыл простой тестовый пример http://www.freepascal.org/docs-html/rtl/sysutils/findfirst.html он схож с Вашим, токо меньше букв :lol:
Код: Выделить всё
ss := CP1251ToUTF8(Name);
Writeln (UTF8ToCP866(ss):40,Size:15); 


ss - не то что раньше было, а просто обозвал так :twisted:

http://radikal.ru/F/s019.radikal.ru/i64 ... 9.png.html

Буква І не отобразилась... Ну это уже и не важно.

не i латинская?
УКРАИНСКАЯ :) кирилица...
Необходимо, чтобы был символ не текущей кодировки и не английский, напр, японская буква и т.д.
когда у меня вырисовалась проблема открытия файла из "БРДОВО БРЯКОЗЯБЛИКОВ" я добавил то что писал раньше и оно открывало и китайскую х... в пути к файлу.


Все проблемы от кривизны рук...
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение SSerge » 10.12.2012 18:01:58

amateur писал(а):Буква І не отобразилась... Ну это уже и не важно.


Еще бы не важно... Как раз из за того, что она не отобразилась, FileAge|FileAgeUTF8 и не сработают.

Зато действующая подсказка, как таки поиметь дату создания файла с экзотическим именем:

Код: Выделить всё
function NameToHex(s:UnicodeString):string;
Var i:integer;
begin
  Result:=' >>>';
  for i:=1 to length(s) do
  begin
    Result+=format('%x ',[ord(s[i])]);
  end;
end;

function SZ(i:LongInt):string;
begin
  result:=Format('%d',[i]);
end;


procedure TForm1.Button1Click(Sender: TObject);
Var s:String;
    Count:LongInt;
    Info:TSearchRec;
    s1:String;
    t:TDateTime;
begin
  Count:=0;
  s:='';
  If FindFirstUTF8 ('*',faAnyFile and faDirectory,Info)=0 then
    begin
    Repeat
      Inc(Count);
      With Info do
        begin
        If (Attr and faDirectory) = faDirectory then
          s+='Дир: ';
          s+=Format('%40s %15s %s %s'#$0D#$0A,[Name,SZ(Size),DateTimeToStr(FileDateToDateTime(Time)),NameToHex(Name)]);
        end;
    Until FindNextUTF8(info)<>0;
    end;
  FindClose(Info);
  s+=Format('Search end. found %d contains'#$0D#$0A,[Count]);
  Memo1.Clear;
  s1:=s;
  Memo1.Append(s1);
end;                                     


amateur писал(а):Все проблемы от кривизны рук...

Проблемы опять таки от кривизны кода связки лазаруса/fpc. Увы, вы даже не поняли в чем состоит проблема. :(
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение amateur » 10.12.2012 18:18:48

1.
Еще бы не важно... Как раз из за того, что она не отобразилась, FileAge|FileAgeUTF8 и не сработают.
- то что оно не показало, не значит что программа не поняла. Буква І- это болезнь ср866 (если с досом работали, то ухищрения ставили... уже не помню как звалось).

Запишите переменную ss в тхт файл, к примеру (только не в дос кодировке :)). Кстати команда dir что говорит в консоли??????

2.
Увы, вы даже не поняли в чем состоит проблема.
руки кривые и костыли не помогают - я о себе любимом :twisted: . Не дорос еще до таких высот...

а вот с кирилицей все буржуйское не очень :(....


кстати: UnicodeString - пока в лазаре бред. Его не желательно трогать. Можно таких блох словить, что и через год баг не найдеш...
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение SSerge » 10.12.2012 18:38:41

amateur писал(а): UnicodeString - пока в лазаре бред. Его не желательно трогать.


В версии с компилятором 2.6.0 да, лучше не трогать, потому что там это фиктивный тип. В 2.7.1 можно трогать, но вне прямых присвоений со строками лазаруса, либо строки объявлять как RawByteString и не включать дерективу {$codepage}. В отдельных независимых модулях вроде работает практически цивильно.

В данном случае его использование роли не играет никакой. Применено же преднамеренно, с целью посмотреть, где можно, а где нет. Оказалось, что почти нигде нельзя.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение amateur » 10.12.2012 18:48:28

Оказалось, что почти нигде нельзя.
вот и я грю: бяка это. Пока его сделают и допилят, а потом перепилят 10 лазарь может появитсо, а зная сколько 1 ждали... Все весьма печально :(.

Добавлено спустя 2 часа 54 минуты 13 секунд:
по поводу символа, попробуйте:
Код: Выделить всё
Label2.Caption := #$25B2  + ' - Вроде оно';
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение poiuyt555 » 11.12.2012 08:08:59

Спасибо большое всем!
Вроде заработало.

А не подскажете еще, как запустить программно данный файл с таким путем?
То ShellExecute тоже не получается запустить.
Русские и английские символы - запускает, а такой путь - не хочет.
poiuyt555
новенький
 
Сообщения: 51
Зарегистрирован: 12.09.2011 07:45:51

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение SSerge » 11.12.2012 08:15:32

poiuyt555 писал(а):То ShellExecute тоже не получается запустить.


Класс TProcessUTF8 опробуйте. В качестве единственного кросс-платформенного метода запуски внешних приложений, представленного LCL

Добавлено спустя 12 минут 17 секунд:
:D Хотя... Я бы таки порекомендовал завязывать с использованием имен, не попадающих под текущую локаль.
Проблемы сидят глубоко :? и встретившиеся функции с проблемами скорее всего будут не единственными.
Ибо:
- LCL Используются неуникодные функции WinAPI
- даже если это попробовать обойти, при передаче параметров полезет скрытая конверсия строк
- решение будет for windows only
- более того, for Vista and above only. В XP французские фокусы не проходят. Имя файла при прочитывании каталогов - железно искажено, и что-то сделать с ним можно только по маске или по "истинному имени"
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение amateur » 11.12.2012 10:33:25

Вроде заработало.

т.е. если добавить символом то норм и на хп, и на 7-ке, а при копи-пасте бяка ?
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение poiuyt555 » 11.12.2012 12:02:30

Вроде заработало.

Заработало, да не все :)

т.е. если добавить символом то норм и на хп, и на 7-ке, а при копи-пасте бяка ?

И по коду и по копи-паст в xp всегда квадратик.
poiuyt555
новенький
 
Сообщения: 51
Зарегистрирован: 12.09.2011 07:45:51

Re: Вопрос с символами unicode FileAgeUTF8

Сообщение amateur » 11.12.2012 12:34:25

Теперь странности:
Код: Выделить всё
Label2.Caption := #$25B2  + ' - Вроде оно';


данный код, по идее, должен показать треугольник перед словом. По крайней мере в "Вставить из таблицы символов" код тот что нужен.

В мсе, к примеру, треугольник есть.

Лазарь, мдя. В лине треугольник есть, а вот в винде есть вопросы.

Т.е. Label2.Caption
в линукс
▲- Вроде оно
в винде
? ?????????? ??????
убираем знак и вуаля
- Вроде оно

Это так и должно быть (т.е. мини-реклама лина :)). Или символ нужно добавить иным способом?
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru