Автор Тема: regesp русские буквы в 16-ричный код  (Прочитано 4754 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Atreides

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
regesp русские буквы в 16-ричный код
« : 27 Марта 2005, 20:16:40 »
Подскажите, как заменить в строке все русские буквы на их шестнадцатеричные коды вида %xx  то есть чтобы строка "абв" выглядела как "%E0%E1%E2". Заранее спасибо, кого не заломает ответить 8)

Оффлайн Atreides

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
regesp русские буквы в 16-ричный код
« Ответ #1 : 27 Марта 2005, 20:19:28 »
Фу ты, даже "regexp" не могу нормально написать...

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
regesp русские буквы в 16-ричный код
« Ответ #2 : 27 Марта 2005, 20:32:24 »
попробуй написать сам, я помогу

да, и поясни, пожалуйста, какие критерии русских букв?
0 OK, 0:1

Оффлайн Atreides

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
regesp русские буквы в 16-ричный код
« Ответ #3 : 27 Марта 2005, 20:45:48 »
Русские буквы выхватываю так: $string =~ s/[\\xE0-\\xFF]?/.../g; вопрос - что написать в замену?

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
regesp русские буквы в 16-ричный код
« Ответ #4 : 27 Марта 2005, 21:10:53 »
ага, хорошо

вариант 1

$string =~ s/([\\xE0-\\xFF])/sprintf( "%%%02X", $1 )/eg;


вариант2 (более быстрый)

# предварительно создадим массив следующего содержания
for( 0 .. 255 ) {
  $chr2hex{ chr() } = sprintf( "%%%02X", $_ );
}
# и упрощаем рег. выражение
$string =~ s/([\\xE0-\\xFF])/$chr2hex{$1}/g;
0 OK, 0:1

Оффлайн Atreides

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
regesp русские буквы в 16-ричный код
« Ответ #5 : 27 Марта 2005, 21:51:22 »
ок, написал.

#!/usr/bin/perl
$string = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
$string =~ s/([\\xE0-\\xFF])/sprintf( "%%%02X", $1 )/eg;
print $string;

результат:
%00%00%00%00%00%00ё%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00

где я торможу?
« Последнее редактирование: 27 Марта 2005, 22:27:30 от Atreides »

Оффлайн Atreides

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
regesp русские буквы в 16-ричный код
« Ответ #6 : 27 Марта 2005, 22:53:33 »
Фух, домучал наконец. Вот это вроде работает:
$string =~ s/([\\xA8,\\xB8,\\xC0-\\xFF])/sprintf("%%%02X", ord($1))/eg;

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
regesp русские буквы в 16-ричный код
« Ответ #7 : 27 Марта 2005, 23:42:47 »
да, прошу прощения, ord забыл : )
0 OK, 0:1

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28