Perl « Как определить кодировку текста и перевести его в KOI8-R?

Есть такой код:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .perl.geshi_code {font-family:monospace;} .perl.geshi_code .imp {font-weight: bold; color: red;} .perl.geshi_code .kw1 {color: #b1b100;} .perl.geshi_code .kw2 {color: #000000; font-weight: bold;} .perl.geshi_code .kw3 {color: #000066;} .perl.geshi_code .co1 {color: #666666; font-style: italic;} .perl.geshi_code .co2 {color: #009966; font-style: italic;} .perl.geshi_code .co3 {color: #0000ff;} .perl.geshi_code .co4 {color: #cc0000; font-style: italic;} .perl.geshi_code .co5 {color: #0000ff;} .perl.geshi_code .coMULTI {color: #666666; font-style: italic;} .perl.geshi_code .es0 {color: #000099; font-weight: bold;} .perl.geshi_code .es_h {color: #000099; font-weight: bold;} .perl.geshi_code .br0 {color: #009900;} .perl.geshi_code .sy0 {color: #339933;} .perl.geshi_code .st0 {color: #ff0000;} .perl.geshi_code .st_h {color: #ff0000;} .perl.geshi_code .nu0 {color: #cc66cc;} .perl.geshi_code .me1 {color: #006600;} .perl.geshi_code .me2 {color: #006600;} .perl.geshi_code .re0 {color: #0000ff;} .perl.geshi_code .re4 {color: #009999;} .perl.geshi_code span.xtra { display:block; }

#!/usr/bin/perl -w

use Encode;
use Encode::Guess;

my $data = 'п╬п╠я─п╟я┴п╟я┌я';
my $data2 = 'уФБФЙУФЙЛБ';

my $enc = Encode::Guess->guess_encoding($data, qw/utf-8 utf8 koi8-r cp-1251/);

warn $enc;
 

На выходе получаю:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ini.geshi_code {font-family:monospace;} .ini.geshi_code .imp {font-weight: bold; color: red;} .ini.geshi_code .co0 {color: #666666; font-style: italic;} .ini.geshi_code .sy0 {color: #000066; font-weight:bold;} .ini.geshi_code .st0 {color: #933;} .ini.geshi_code .re0 {color: #000066; font-weight:bold;} .ini.geshi_code .re1 {color: #000099;} .ini.geshi_code .re2 {color: #660066;} .ini.geshi_code span.xtra { display:block; }

Unknown encoding: п╬п╠я─п╟я┴п╟я┌я at /usr/lib/perl/5.10/Encode/Guess.pm line 119.
 


Попробовал другой модуль:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .perl.geshi_code {font-family:monospace;} .perl.geshi_code .imp {font-weight: bold; color: red;} .perl.geshi_code .kw1 {color: #b1b100;} .perl.geshi_code .kw2 {color: #000000; font-weight: bold;} .perl.geshi_code .kw3 {color: #000066;} .perl.geshi_code .co1 {color: #666666; font-style: italic;} .perl.geshi_code .co2 {color: #009966; font-style: italic;} .perl.geshi_code .co3 {color: #0000ff;} .perl.geshi_code .co4 {color: #cc0000; font-style: italic;} .perl.geshi_code .co5 {color: #0000ff;} .perl.geshi_code .coMULTI {color: #666666; font-style: italic;} .perl.geshi_code .es0 {color: #000099; font-weight: bold;} .perl.geshi_code .es_h {color: #000099; font-weight: bold;} .perl.geshi_code .br0 {color: #009900;} .perl.geshi_code .sy0 {color: #339933;} .perl.geshi_code .st0 {color: #ff0000;} .perl.geshi_code .st_h {color: #ff0000;} .perl.geshi_code .nu0 {color: #cc66cc;} .perl.geshi_code .me1 {color: #006600;} .perl.geshi_code .me2 {color: #006600;} .perl.geshi_code .re0 {color: #0000ff;} .perl.geshi_code .re4 {color: #009999;} .perl.geshi_code span.xtra { display:block; }

use Encode::Detect::Detector;

my $charset = Lingua::DetectCharset::Detect($data);
use Encode 'from_to';
from_to($data, $charset, 'koi8-r');
warn $data;
 


Тут тоже кодировка не определяется:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ini.geshi_code {font-family:monospace;} .ini.geshi_code .imp {font-weight: bold; color: red;} .ini.geshi_code .co0 {color: #666666; font-style: italic;} .ini.geshi_code .sy0 {color: #000066; font-weight:bold;} .ini.geshi_code .st0 {color: #933;} .ini.geshi_code .re0 {color: #000066; font-weight:bold;} .ini.geshi_code .re1 {color: #000099;} .ini.geshi_code .re2 {color: #660066;} .ini.geshi_code span.xtra { display:block; }

Unknown encoding 'WIN' at decode.pl line 40
 


Как все-таки правильно определить кодировку, а затем перевести в KOI8-R?

1 ответов


я пользуюсь вот этим

Соответственно выясняем что это KOI8-R перекодированный в utf-8, то есть делаем

decode_utf8($data)
 
и готово