powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
19 сообщений из 19, страница 1 из 1
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33194773
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть проблема - файл, полученный как параметр через STDIN, записывается в виде последовательности 16-ричных чисел для всех русских символов. Чем можно обработать из Perl'е этот файл, чтобы получить нормальный вид русских слов в кодировке Windows? Что-то пока никаких стандартных функций не нашел... Или как-то можно решить эту проблему еще при получении данных с русскими словами в виде параметра, которые потом записываются в этот файл. Мне кажется, проблема стандартная, наверняка есть простое решение. Просьба помочь разобраться.
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33194811
nik2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Деев И.Есть проблема - файл, полученный как параметр через STDIN, записывается в виде последовательности 16-ричных чисел для всех русских символов. Чем можно обработать из Perl'е этот файл, чтобы получить нормальный вид русских слов в кодировке Windows? Что-то пока никаких стандартных функций не нашел... Или как-то можно решить эту проблему еще при получении данных с русскими словами в виде параметра, которые потом записываются в этот файл. Мне кажется, проблема стандартная, наверняка есть простое решение. Просьба помочь разобраться.


проблемма стандартная - решение, ты отмел в предыдущем посте ( я про использовние CGI.pm ), лучшеб сказал что у тебя за ошибки вылезали при использовании того модуля, чем веломобиль изобретать...
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33194836
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eпроблемма стандартная - решение, ты отмел в предыдущем посте ( я про использовние CGI.pm ), лучшеб сказал что у тебя за ошибки вылезали при использовании того модуля, чем веломобиль изобретать...

Да это не я отметал - он сам "отмелся". Сервер мне не доступен на уровне файловой системы. Попытка загрузить модуль приводит к примерно такому сообщению: Internal Server Error. ... Oracle-HTTP-Server/1.3.28 Server.

Логи мне пока недоступны. Сейчас попробую добраться до них через третьи руки.

А как решение-то выглядит? Я поэтому и обратился, чтобы "веломобиль" не изобретать.
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33195280
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.проблемма стандартная - решение, ты отмел в предыдущем посте ( я про использовние CGI.pm ), лучшеб сказал что у тебя за ошибки вылезали при использовании того модуля, чем веломобиль изобретать...

Да это не я отметал - он сам "отмелся". Сервер мне не доступен на уровне файловой системы. Попытка загрузить модуль приводит к примерно такому сообщению: Internal Server Error. ... Oracle-HTTP-Server/1.3.28 Server.
[/quot]
а как ты туда скрипты заливаеш ?


Логи мне пока недоступны. Сейчас попробую добраться до них через третьи руки.

А как решение-то выглядит? Я поэтому и обратился, чтобы "веломобиль" не изобретать.

как уже сказали пользоваться CGI.pm, если его нет на сервере, то опять же воспользоваться CGI.pm, предварительно установив его себе домашнюю директорию. Если к модулям, в частности, выше названному стойкое отвращение, то как вариант скачать его себе на локальную машину, просмотреть код, прочитать соответствующие RFC, и если не пропадет отвращение написать свое...
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33195621
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как ты туда скрипты заливаеш ?

Есть один доступный мне каталог, туда и заливаю.


А как решение-то выглядит? Я поэтому и обратился, чтобы "веломобиль" не изобретать.

как уже сказали пользоваться CGI.pm, если его нет на сервере, то опять же воспользоваться CGI.pm, предварительно установив его себе домашнюю директорию. Если к модулям, в частности, выше названному стойкое отвращение, то как вариант скачать его себе на локальную машину, просмотреть код, прочитать соответствующие RFC, и если не пропадет отвращение написать свое...

Я с Perl'ом третий день по часу в день знакомлюсь. Нужен он мне только для одной задачки. Чайник я в нем абсолютный. Отвращения ни к чему нет, но рулю серваком не я, к сожалению. Пока это все раскрутится... Легче оказалось самому написать несколько строк кода и вручную все обработать.
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33195878
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
use CGI::Carp qw(fatalsToBrowser); 
продублирует ошибку на экран!

а в обще я не совсем понял в чем проблема, распишите какое програмное обеспечение, настроен ли сервер на работу с кирилицей?

Код: plaintext
$content=~s/%([a-fA-F0- 9 ][a-fA-F0- 9 ])/pack("C",hex($ 1 ))/ge;
преобразует 16-ричный код к нормальному виду.
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197297
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николай aka Motodor
Код: plaintext
use CGI::Carp qw(fatalsToBrowser); 
продублирует ошибку на экран!

а в обще я не совсем понял в чем проблема, распишите какое програмное обеспечение, настроен ли сервер на работу с кирилицей?

Код: plaintext
$content=~s/%([a-fA-F0- 9 ][a-fA-F0- 9 ])/pack("C",hex($ 1 ))/ge;
преобразует 16-ричный код к нормальному виду.

Спасибо!
Но что-то не получается.
#!/usr/bin/perl -w
print "Content-Type: text/html\n";
print "Charset: windows-1251\n\n";
print "<HTML>";
print '<META content="text/html; charset=windows-1251" http-equiv="Content-Type">';

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
print $buffer;
print "<BR><BR>";

$buffer = ~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/ge;
print $buffer;

Print "</BODY></HTML>";

Выдает

PAR1=%F2%E5%EA%F1%F2%FB&BIG_XML=%F2%E5%EA%F1%F2%FB
(Это то, что прочитано)

4294967295
(после $buffer = ~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/ge;)

А в этих полях было "текст" и "текст".
В чем дело?

Прошу простить за полнейшую неграмотность в Perl и глупые вопросы, но совершенно нет времени спокойно все изучить...
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197358
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой тип запроса? Post или Get?
если get то все верно он выдает! для get запроса надо делать
Код: plaintext
1.
2.
3.
$bufffer=$ENV{'QUERY_STRING'};
$bufffer=~tr/+/ /;
$bufffer=~s/%(..)/pack("C",hex($ 1 ))/ge;
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197394
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николай aka Motodorкакой тип запроса? Post или Get?
если get то все верно он выдает! для get запроса надо делать
Код: plaintext
1.
2.
3.
$bufffer=$ENV{'QUERY_STRING'};
$bufffer=~tr/+/ /;
$bufffer=~s/%(..)/pack("C",hex($ 1 ))/ge;


Нет, у меня задан метод POST:
<FORM METHOD=POST...
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197424
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$buffer=~tr/+/ /;
$buffer=~s/%([a-fA-F0- 9 ][a-fA-F0- 9 ])/pack("C",hex($ 1 ))/ge;
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197478
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И. Николай aka Motodorкакой тип запроса? Post или Get?
если get то все верно он выдает! для get запроса надо делать
Код: plaintext
1.
2.
3.
$bufffer=$ENV{'QUERY_STRING'};
$bufffer=~tr/+/ /;
$bufffer=~s/%(..)/pack("C",hex($ 1 ))/ge;


Нет, у меня задан метод POST:
<FORM METHOD=POST...

...следующей деталью веломобиля должна стать функция которая отделяет имена переданных параметров от их содержания. После того как она будет готова, окажется, что файлы передаются несколько по другому чем patam_file=%ff%45... но это уже другая история... :)
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197482
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николай!
Большое спасибо за терпение.
Все получилось! Очень благодарен!

Избавился от своего неэффективного кода, который в цикле перебирал весь текст и переводил 16-ричные коды в буквы.

#while ($i < length($buffer))
#{
## Считываем порцию
#$srs = substr($buffer,$i,1);
#$cod = ord($srs);
#if ( $cod==37)
# {$buffer1=$buffer1.chr(hex(substr($buffer,$i+1,2))); $i=$i+3;}
#elsif ($cod == 43)
# {$buffer1=$buffer1.' '; $i=$i+1;}
#else {$buffer1=$buffer1.$srs; $i=$i+1;}
#}
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197503
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Деев И.
если что задавайте вопросы будем пытаться помочь :)

g613...следующей деталью веломобиля должна стать функция которая отделяет имена переданных параметров от их содержания. После того как она будет готова, окажется, что файлы передаются несколько по другому чем patam_file=%ff%45... но это уже другая история... :)
если Вам интересно и Вы готовы принять участие в разработке "обработчика входящих запросов" могу выложить свой вариант!
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33197675
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николай aka Motodor2Деев И.
если что задавайте вопросы будем пытаться помочь :)

g613...следующей деталью веломобиля должна стать функция которая отделяет имена переданных параметров от их содержания. После того как она будет готова, окажется, что файлы передаются несколько по другому чем patam_file=%ff%45... но это уже другая история... :)
если Вам интересно и Вы готовы принять участие в разработке "обработчика входящих запросов" могу выложить свой вариант!


Это оказалось значительно проще:

%params =split(/[=&]/,$buffer);
$par1 = $params{'PAR1'};

А у Вас какой вариант?

P.S. У меня даже самокат, а не веломобиль!
P.P.S Грешно смеяться над убогими!
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33198274
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я просто так выкладывайть полный код не буду
вот держите, начальный вариант, и модернизируйте под себя

POST - application/x-www-form-urlencoded
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my @pairs=split(/&/,$buffer);
foreach (@pairs) {
	my($key, $content)=split(/=/);
	$content=~tr/+/ /;
	$content=~s/%([a-fA-F0- 9 ][a-fA-F0- 9 ])/pack("C",hex($ 1 ))/ge;
	$content=~s/^\s+//g;
	$content=~s/\s+$//g;
	$param{$key}=$content;
GET
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$bufffer=$ENV{'QUERY_STRING'};
@pairs=split(/&/,$bufffer);
foreach $item(@pairs) {
	my($key,$content)=split(/=/,$item, 2 );
	$content=~tr/+/ /;
	$content=~s/%(..)/pack("C",hex($ 1 ))/ge;
	$param{$key}=$content;
	}
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33198294
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И. Николай aka Motodor2Деев И.
если что задавайте вопросы будем пытаться помочь :)

g613...следующей деталью веломобиля должна стать функция которая отделяет имена переданных параметров от их содержания. После того как она будет готова, окажется, что файлы передаются несколько по другому чем patam_file=%ff%45... но это уже другая история... :)
если Вам интересно и Вы готовы принять участие в разработке "обработчика входящих запросов" могу выложить свой вариант!


Это оказалось значительно проще:

%params =split(/[=&]/,$buffer);
$par1 = $params{'PAR1'};

А у Вас какой вариант?


как минимум, тот который знает,что:
- вместо `&` может встретится `;`
- знает что `+` надо заменить на ` `
- понимает всяки-разны селекты
- знает что имена параметров также могут быть %d0%c1%d2%c1%cd%c5%d4%d2%0a
- понимает multipart/form-data
....


P.S. У меня даже самокат, а не веломобиль!


причем сделанный из бумаги и склеенный соплями... :)


P.S.
ты уже скачал и посмотрел CGI.pm ?
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33198320
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2g613, поддерживаю, дело не для слобонервных и опытных программистов...
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33198360
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S. У меня даже самокат, а не веломобиль!


причем сделанный из бумаги и склеенный соплями... :)


P.S.
ты уже скачал и посмотрел CGI.pm ?

Ладно уж, "соплями"...
Хрен с ним, лишь бы ездил. Это нужно для конкретной задачи, универсальности не требуется.

CGI.pm не подключается. Там стоит Oracle Application Server, что-то не удается на нем этот модуль завести, админы даже запрос уже оформили. Какой-то Perl там не стандартный, что ли...Подробностей не знаю, не я этим занимаюсь.
...
Рейтинг: 0 / 0
(Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
    #33198371
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Николай aka Motodorя просто так выкладывайть полный код не буду
вот держите, начальный вариант, и модернизируйте под себя

POST - application/x-www-form-urlencoded
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my @pairs=split(/&/,$buffer);
foreach (@pairs) {
	my($key, $content)=split(/=/);
	$content=~tr/+/ /;
	$content=~s/%([a-fA-F0- 9 ][a-fA-F0- 9 ])/pack("C",hex($ 1 ))/ge;
	$content=~s/^\s+//g;
	$content=~s/\s+$//g;
	$param{$key}=$content;
GET
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$bufffer=$ENV{'QUERY_STRING'};
@pairs=split(/&/,$bufffer);
foreach $item(@pairs) {
	my($key,$content)=split(/=/,$item, 2 );
	$content=~tr/+/ /;
	$content=~s/%(..)/pack("C",hex($ 1 ))/ge;
	$param{$key}=$content;
	}


Спасибо!
Может, пригодится. Пока нет времени на эксперименты.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl) Преобразование русского текста в 16-ричном виде в нормальный текст
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]