[perl] win1251 -> utf8 как перекодировать?
sub utf82win1251 {
my $mess=shift;
my %conv='';
my @utf8=('\0\xB0','\0\xB1','\0\xB2','\0\xB3','\0\xB4',
'\0\xB5', '\1\x91','\0\xB6','\0\xB7','\0\xB8',
'\0\xB9','\0\xBA','\0\xBB','\0\xBC', '\0\xBD',
'\0\xBE','\0\xBF','\1\x80','\1\x81','\1\x82',
'\1\x83','\1\x84', '\1\x85','\1\x86','\1\x87',
'\1\x88','\1\x89','\1\x8A','\1\x8B','\1\x8C',
'\1\x8D','\1\x8E','\1\x8F','\0\x90','\0\x91',
'\0\x92','\0\x93','\0\x94', '\0\x95','\0\x81',
'\0\x96','\0\x97','\0\x98','\0\x99','\0\x9A',
'\0\x9B', '\0\x9C','\0\x9D','\0\x9E','\0\x9F',
'\0\xA0','\0\xA1','\0\xA2','\0\xA3', '\0\xA4',
'\0\xA5','\0\xA6','\0\xA7','\0\xA8','\0\xA9',
'\0\xAA','\0\xAB', '\0\xAC','\0\xAD','\0\xAE',
'\0\xAF','\1\x97','\0\x87','\1\x94','\1\x96',
'\0\x86','\2\x91','\2\x90','\1\x9E','\0\x8E',
'\1\x91','\0\x81','\0\x84');
my @win=('Ю','А','Б','Ц','Д','Е','╦','Ф','Г','Х','И','Й','К','Л','М',
'Н','О','П','Я','Р', 'С','Т','У','Ж','В','Ь','Ы','З','Ш','Э',
'Щ','Ч','Ъ','ю','а','б','ц','д','е','╗', 'ф', 'г','х','и','й',
'к','л','м','н', 'о','п','я','р','с','т','у','ж','в','ь','ы',
'з','ш','э','щ','ч','ъ','©','╞','╨', 'Ё' ,'╡','Є','╔','╒','║','╦','╗','╙');
no strict;
{
@hash{@utf8}=@win;
%conv=%hash;
}
foreach my $sym(keys %conv) {
$mess=~s/$sym/$conv{$sym}/g;
}
return $mess;
}
на этот баян я тоже натыкался
но вот в обратную сторону он почему-то у меня не заработал
надо ещё раз попробовать

выводит все эти \0\x9B\0\xA5 прям так в win1251 видимо
Iconv(3) User Contributed Perl Documentation Iconv(3)
NAME
Text::Iconv - Perl interface to iconv codeset conversion function
SYNOPSIS
use Text::Iconv;
$converter = Text::Iconv->new("fromcode", "tocode");
$converted = $converter->convert("Text to convert");
DESCRIPTION
The Text::Iconv module provides a Perl interface to the iconv func-
tion as defined by the Single UNIX Specification. The convert method
converts the encoding of characters in the input string from the from-
code codeset to the tocode codeset, and returns the result.
Settings of fromcode and tocode and their permitted combinations are
implementation-dependent. Valid values are specified in the system
documentation
на этой платформе нет ;(
есть iconv и для Windows .
Ну а сам p5-Text-Iconv - это просто Perl, ему все равно на какой платформе пускаться.
p.s.
если что, то в PHP есть встроенные функции для конвертации.
Если это Windows, то Ну а сам p5-Text-Iconv - это просто Perl, ему все равно на какой платформе пускаться.
p.s.
если что, то в PHP есть встроенные функции для конвертации.
под линуксом
но полноценного пёрла туда не перенесли
и iconv пока что тоже сломан
есть microperl, который в общем-то, заменяет perl по функциональности, но не имеет никаких модулей (просто бинарник и всё)
есть ruby, но тоже довольно обрезанный
есть bash
есть php, но не знаю в каком виде - ещё не ставил
просто из-за скрипта ставить на роутер php не хочется
Оставить комментарий
Biglem
кто знает как на перл написать перекодирование символов аналогичное iconv -f cp1251 -t utf8 ?проблема в том, что можно пользоваться только самым базовым perl'ом - никаких библиотек нет
надо это решить либо через pack/unpack, либо через тупую табличную перекодировку или регулярные выражения
у меня почему-то не работает мой вариант:
$str =~ tr/абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯїЇєіІґҐўЎёЁЄ/\0\xB0\0\xB1\0\xB2\0\xB3\(И.Т.Д)/;
выводит крокозяблы
может кто-нибудь написать рабочий вариант?