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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 14:51   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию Оператор IF. Выбор кодировки ХТМЛ-страницы

Добрый день. Есть функция выбора кодовой страницы

Код:
function FindCharSet(const Data:string):integer;
const (*это в общем не нужно*)
  CodePages: array[0..10] of string = ('utf-8','utf-16','windows-1251','koi8-r','iso-8859-1',
  'iso-8859-15','windows-1252','iso-8859-2','iso-8859-3','iso-8859-4','iso-8859-5');

var Pos1,Pos2:integer; CharSet:string;
begin
  Pos1:=PosEx('charset=',Data,1);   
  Pos2:=PosEx('>',Data,Pos1);
  CharSet:=Copy(Data, Pos1,(Pos2-Pos1+1)); (*выделяем чарсет из страницы*)
  if Pos1 > 0 then (*если чарсет есть тогда*)
  begin
    if True then (*если в чарсет нет указания на кодировку страницы, принудительно назначить 1251*)
      begin
        Result:=1251;
      end
      else  (*когда номер страницы указан*)
      begin
        if PosEx('utf-8',CharSet,1) > 0 then         Result:=65001;
        if PosEx('utf-16',CharSet,1) > 0 then        Result:=65001;
        if PosEx('windows-1251',CharSet,1) > 0 then  Result:=1251;
        if PosEx('windows-1252',CharSet,1) > 0 then  Result:=1252;
        if PosEx('koi8-r',CharSet,1) > 0 then        Result:=20866;
        if PosEx('iso-8859-1',CharSet,1) > 0 then    Result:=28591;
        if PosEx('iso-8859-2',CharSet,1) > 0 then    Result:=28592;
        if PosEx('iso-8859-3',CharSet,1) > 0 then    Result:=28593;
        if PosEx('iso-8859-4',CharSet,1) > 0 then    Result:=28594;
        if PosEx('iso-8859-5',CharSet,1) > 0 then    Result:=28595;
        if PosEx('iso-8859-15',CharSet,1) > 0 then   Result:=28605;
      end;
  end
  else (когда чарсета нет, присваиваем принудительно)
  begin
    Result:=1251;
  end;
end;
Внимание!! Вопрос: Как покороче написать if True then
если использовать массив строк, то прийдется лепить излишне сложный код, поскольку есть варианты:
charset=windows-1251"
charset="windows-1251"
charset='windows-1251' из этого нужно выделить windows-1251(к примеру)
если помножить на число кодировок получается громоздко. нет ли какого фокуса чтоб написать покороче
Pcrepair вне форума Ответить с цитированием
Старый 11.03.2013, 15:48   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Проверьте:
Код:
function FindCharSet(const Data: string): integer;
type
  tcodepage = record
    n: string[20];
    v: integer;
  end;
const
  CodePages: array [0 .. 10] of tcodepage = (
    (n: 'utf-8'; v: 65001),
    (n: 'utf-16'; v: 65001),
    (n: 'windows-1251'; v: 1251),
    (n: 'windows-1252'; v: 1252),
    (n: 'koi8-r'; v: 20866),
    (n: 'iso-8859-1'; v: 28591),
    (n: 'iso-8859-2'; v: 28592),
    (n: 'iso-8859-3'; v: 28593),
    (n: 'iso-8859-4'; v: 28594),
    (n: 'iso-8859-5'; v: 28595),
    (n: 'iso-8859-15'; v: 28605));
var
  Pos1, Pos2, i: integer;
  CharSet: string;
begin
  Pos1 := PosEx('charset=', Data, 1);
  Pos2 := PosEx('>', Data, Pos1);
  CharSet := Copy(Data, Pos1, (Pos2 - Pos1 + 1));
  (* выделяем чарсет из страницы *)
  if Pos1 > 0 then (* если чарсет есть тогда *)
  begin
    if True then //вот этот True измените
    (* если в чарсет нет указания на кодировку страницы, принудительно назначить 1251 *)
    begin
      Result := 1251;
    end
    else (* когда номер страницы указан *)
    begin
      for i := low(CodePages) to high(CodePages) do
        if PosEx(CodePages[i].n, CharSet, 1) > 0 then
        begin
          Result := CodePages[i].v;
          break;
        end;
    end;
  end
  else { когда чарсета нет, присваиваем принудительно }
  begin
    Result := 1251;
  end;
end;
Изменил только if'ы, но в таком виде функция, скорее всего, не работает. Разберитесь с оставшимися if'ами.

UPD
Пожалуйста.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.03.2013 в 16:03.
BDA на форуме Ответить с цитированием
Старый 11.03.2013, 15:55   #3
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

Спасибо за пример, буду пробовать, заодно с записями разберусь
Pcrepair вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка ХТМЛ-страницы без участия пользователя Pcrepair JavaScript, Ajax 8 01.09.2012 11:06
Выбор технологии перезагрузки ХТМЛ-страницы Pcrepair PHP 3 18.08.2012 23:04
выбор из select до загрузки страницы Xsires HTML и CSS 3 17.03.2012 18:37
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06