Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 22:37   #11
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

Я видел эти посты (HTML Entities) - модуль не подходит для Delphi 7.
А второй не заметил, спасибо. Разбираюсь.
А решение приведенное выше выдает строку - CAA:0O, хотя на самом деле должно выдавать Русская
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Старый 06.02.2012, 23:12   #12
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

Еще вопросик:
есть процедура конвертации

Код:

  function HexToInt(Str : string): integer;
var i, r : integer;
begin
  val('$'+Trim(Str),r, i);
  if i<>0 then HexToInt := 0 {была ошибка в написании числа}
  else HexToInt := r;
end;


   function NormSTR(st : AnsiString ) : AnsiString;
var
  i     : integer;
  sa    : AnsiString;
  st2   : string;
  s,s1  : AnsiString;

begin
  sa := '';
  i := 1;

  while I <= Length(st) do begin
    s := Copy(st, i, 1);
    if s = '#' then begin
      st2 := Copy(st, i + 1, i + 3);
      s1 := Chr(HexToInt(st2));
      sa := sa + s1;
      Delete(st, i,i + 4);
    end
    else begin
      sa := sa + s;
      Delete(st,i,1);
    end;
  end;
  Result := sa;
end;
Это полный аналог вышеприведенной функции HTMLDecode. Если ей передать параметр в виде CHAR то она возвращает правильное значение конвертированное из HTML-Entities в символ.
например:
Код:
Edit2.Text:=NormSTR(#1056);
в ответе от функции получаем символ, а точнее русскую букву "Р", это правильная работа функции.
Если же функции передать значение в виде String, например:
Код:
Edit2.Text:=NormSTR('#1056');
в ответе от функции получаем "#1056", это НЕправильная работа функции.

Объясните пожалуйста, мне нужно обрабатывать много значений через эту функцию (NormSTR), для этого я написал процедуру:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  m : TStrArray;
  i : Integer;
  sa,ss:AnsiString;
begin
ss:='';
.........
.........
  for I := 0 to Length(m)-1 do begin
   sa:=m[i];
   sa:=NormSTR(chr (strtoint(sa))); //передача функции значений в цикле типа "#1091" и т.д.
    ss:=ss+sa;
    end;
   memo1.Lines.Add(ss);
   end;
Почему-то функции передается параметр в виде String а не Char.
Поэтому возвращаемый ею результат для каждого символа получается не верным.
Как можно решить данную проблему.
Прикладываю на всякий случай свой проект. Гляньте пожалуйста.
Вложения
Тип файла: rar 148_3zk.rar (168.9 Кб, 8 просмотров)
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ

Последний раз редактировалось Den7656; 07.02.2012 в 02:00.
Den7656 вне форума Ответить с цитированием
Старый 07.02.2012, 06:28   #13
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

C этим тоже разобрался, вот код который все это делает.

Код:
function Unic2Ansi(Str: string): string;
 var
   x, z: Integer;
   tmp: string;
 begin
   x := Pos('#', Str);
   repeat
     tmp := Str[x + 1] + Str[x + 2] + Str[x + 3] + Str[x + 4];
     Delete(Str, x, 5);
     z := StrToInt(tmp) - 848;
     Insert(Char(z), Str, x);
     x := Pos('#', Str);
   until x = 0;

   x := Pos(#39, Str);
   repeat
     Delete(Str, x, 1);
     x := Pos(#39, Str);
   until x = 0;

   Result := Str;
 end;
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Старый 07.02.2012, 08:51   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если бы вчера сказали, что Вам нужно именно DFM unicode строчки разбирать, то я бы ещё вчера отправил Вас к исходнику программы, которой я иногда пользуюсь — DfmUn2An.zip ((внимание! Это проект(исходник) под библиотеку KOL)
Цитата:
DfmUn2An (Dfm Unicode To Ansi)
------------------------------
Программа переводит ресурс dfm-файла(ов) из Unicode в Ansi.
Это нужно для совместимости Delphi 5 с более поздними версиями
Delphi 6, 7... Они используют Unicode, а Delphi 5 Ansi.
там используется такая примерно функция:
Код:
//======================================
//== ПЕРЕВОД СТРОКИ ИЗ UNICODE В ANSI ==
//======================================
function StrUnic2Ansi(Str: string): string;
var
  x: Integer;
  Num: string;
begin
  //== Удаляем из строки символы <'> - #39
  x := Pos(#39, Str);
  repeat
    Delete(Str, x, 1);
    x := Pos(#39, Str);
  until x = 0;

  for x := Pos('#', Str) to Length(Str) - 4 do
    if (Str[x + 1] in ['0'..'9']) and (Str[x + 2] in ['0'..'9']) and
       (Str[x + 3] in ['0'..'9']) and (Str[x + 4] in ['0'..'9']) then
    begin
      Num := Str[x + 1] + Str[x + 2] + Str[x + 3] + Str[x + 4];
      Delete(Str, x, 5);
      Insert(WideChar(StrToInt(Num)), Str, x);
    end;

  //== Переводим '#39' в <'>
  x := Pos('#39', Str);
  if x = 0 then
  begin
    Result := Str;
    Exit;
  end;

  repeat
    Delete(Str, x, 3);
    Insert(#39, Str, x); // '#39' -> <'>
    x := Pos('#39', Str);
  until x = 0;
  Result := Str;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2012, 09:16   #15
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

Вот только жаль что эти функции не работают с китайской кодировкой. Именно из-за нее я и взялся переводить проекты, написал код для перевода всех комментариев, String'ов. Осталось только это. Никак не справиться мне с этой кодировкой((
Хотя если вручную забить например (&_#26032;&_#22686;&_#20184;&_#2745 4;&_#26041;&_#21517;&_#31216 только без знака "_" в HTML'ку эти иероглифы, то они отображаются нормально. Никак не могу понять почему эта функция никак с ними не справится (((
вот пример из DFM'а: #26032#22686#20184#27454#26041#2151 7#31216
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ

Последний раз редактировалось Den7656; 07.02.2012 в 09:23.
Den7656 вне форума Ответить с цитированием
Старый 07.02.2012, 09:22   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Никак не могу понять почему эта функция никак с ними не справится
Потому, что для этих кодов нет представления в кодовой странице 1251, а для кириллицы есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.02.2012, 09:25   #17
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

А как же тогда быть ? Или другого выхода как вручную DFM'ы переводить нету ?
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Старый 07.02.2012, 09:36   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А как же тогда быть ? Или другого выхода как вручную DFM'ы переводить нету ?
хотя я уже выхожу за рамки собственного опыта, но тем не менее рискну заявить, что есть нормальное решение. Вот только нужно учесть, что нужно использовать Uncicode (и желательно Delphi >= 2009, которая реально поддерживает Unicode, в том числе и в визуальных компонентах. т.е. можно отобразить в TEdit/TLabel/TMemo эти ваши иероглифы.), второе, если Вы собираетесь писать иероглифы в файл - учтите, что их можно записать либо в текстовый файл формата Unicode, либо кодировать (один из вариантов кодировки Unicode символов и представлен в DFM файлах)...

ОЧЕНЬ рекомендую ознакомится с постом уважаемого GunSmoker'а - ТУТ (и обязательно сходите по ссылочке в этом сообщении - "Не существует такой вещи как просто текст.")


p.s. а расскажите полностью (поподробнее) как ИЗНАЧАЛЬНО формулировалась задача, которую Вы решаете? Ну что Вы имеете и что хотите с этим сделать, что получить на выходе?

Последний раз редактировалось Serge_Bliznykov; 07.02.2012 в 09:40.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2012, 09:43   #19
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

Написал программу, почти готова, за исключением перевода этих DFM'ов, для перевода проектов Delphi например с китайского или французского языка на русский или английский (в общем языковых пар очень много - те которые предоставляет Google Translate), в принципе с любого языка на любой другой.
Она, собственно, занимается тем что выдирает из файлов PAS все стринги, комментарии и т.д., автоматически их переводит, и после небольших поправок перевода, можно сохранить Pas файл. А с DFM'ами проблема вышла...
Если нужно, могу выложить проект своего переводчика.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ

Последний раз редактировалось Den7656; 07.02.2012 в 09:46.
Den7656 вне форума Ответить с цитированием
Старый 07.02.2012, 09:54   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мне кажется, что Вы ВООБЩЕ НЕ В ТУ СТОРОНУ идёте.
Все сообщения нужно выносить (хоть в ресурсные файлы, хоть в отдельные (CFG/INI/XML и т.д.).
Тогда :
1) добавление нового языка не потребует перевода DFM файлов и перекомпиляции всего проекта.
2) как в любой нормальной программе можно будет выбрать язык (из меню конфигурации), а не запускать отдельно EXEшник, скомпилированный под французский язык, отдельно - под английский, отдельно - под китайский и т.д. и т.п.
3) возможность простого дальнейшего развития программы. Вот представьте, если Вы добавите новую фишку в программу, Вам что - опять переделывать все DFM-ки на все языки и перекомпилировать программу X раз (под каждый язык) ?!

короче - не в ту сторону Вы идёте!!!

Блог GunSmoker-а - Локализация проектов Delphi

поиск по форуму по слову "локализация" дал кучу ссылок! Вот пара из них:

[Поиск] Компонент локализации строковых ресурсов и сторонних компонент delphi

Локализация программы и Delphi(DLL Resources Wizzard) загрузка перевода.

Локализация программ

Локализация програмы

Последний раз редактировалось Serge_Bliznykov; 07.02.2012 в 10:08.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет числа комбинации символов 'ab' во входном потоке символов (Си) skrappy_kokko Помощь студентам 4 14.09.2011 23:10
Таблица html , проблема Igor_13 HTML и CSS 7 19.11.2010 12:54
Что делать, если количество символов в билдере не соответствует количеству символов в билде? BoT_T Общие вопросы Delphi 0 16.11.2010 10:42
Delphi коды символов HTML в русский язык mega-X-mozg Помощь студентам 5 26.02.2010 16:56