LINUX.ORG.RU
ФорумAdmin

Perl и перекодировка символов?


0

0

Господа!!!

Как бы сделать перекодирование строки $str из кодировки windows-1251 в кодировку koi8-r ... Причем сделать это надо средствами perl`а ... может какой модуль есть для этого ...

Если кто знает ... подскажите .. plzzz ....

p.s. пример работы модуля тоже приветствуется .. ;)

anonymous

Ответ на: комментарий от anonymous

Гы ... написал же ... библиотеку ищу ... и вот по чему: iconv иногда выподает, с сообщение что символ не правильный ... illegal типа перекодирует, но не весь файл ... а это для меня не допустимо ... так как скрипт на perl`е ... то рационально и библиотеку по perl`у использовать для этого ... ;))

так есть библиотка?

anonymous
()

вот тебе сразу два примера... Две закомментированные строчки -- перекодировка другим модулем.
PS. эта функция делает несколько больше, чем тебе надо. Но пример ясен 8))))

#
# package Googler::Code
#

package Googler::Code;

use strict;
use warnings;
use Unicode::MapUTF8 qw(to_utf8 from_utf8 utf8_supported_charset);
#use Encode;


require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(code);

sub code {
        my $str = shift;
        my $enc = shift;

        return uc join "", map {sprintf "%%%02x", $_} unpack "C*", from_utf8({-charset=>$enc, -string=>to_utf8({-charset=>"KOI8-U", -string=>$str }) });
#       return uc join "", map {sprintf "%%%02x", $_} unpack "C*", encode ($enc, decode ("koi8-u", $str));
}




1;

Zulu ★★☆☆
()
Ответ на: комментарий от Zulu

Это модуль, это не функция, можно было бы еще перегрузить конструктор ради простой как валенок, перекодировки:

sub koi2win {
    my $str = shift;
    $str =~ tr[\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF2\xF3\xF4\
xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xC1\xC2\xD7\xC7\xC4\xC5\xD6\
xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\xC3\xDE\xDB\xDD\xDF\
xD9\xD8\xDC\xC0\xD1\xB3\xA3][\xC0-\xFF\xA8\xB8];
    return $str;
}

sub win2koi {
    my $str = shift;
    $str =~ tr[\xC0-\xFF\xA8\xB8][\xE1\xE2\xF7\xE7\xE4\xE5\xF6\xFA\xE9\xEA\xEB\xEC\xED\xEE\x
EF\xF0\xF2\xF3\xF4\xF5\xE6\xE8\xE3\xFE\xFB\xFD\xFF\xF9\xF8\xFC\xE0\xF1\xC1\xC2\x
D7\xC7\xC4\xC5\xD6\xDA\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD2\xD3\xD4\xD5\xC6\xC8\x
C3\xDE\xDB\xDD\xDF\xD9\xD8\xDC\xC0\xD1\xB3\xA3];
    return $str;
}

vilfred ☆☆
()
Ответ на: комментарий от vilfred

1) вопрос был про модуль.
2) когда потребуется конвертация из ISO 8859-5 в cp866 -- тоже таблицу рисовать будешь? Такие вещи лучше (и правильней) делать не самому (hint: велосипед уже изобретен!), а модулями, которые есть, и даже в стандартной поставке.

PS. не вижу анонимусов.

Zulu ★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.