Forum Webscript.Ru
Программирование => Perl => Тема начата: Biggelow от 16 Июля 2006, 16:47:26
-
Пытаюсь кодировать из win1251 в utf8:
use Encode;
use utf8;
utf8::encode(@mybanner[1]);
на выходе получаю какую то хрень:
Èíòåðåñíûå íîâîñòè
явно что-то не то...
-
Ну чего ничкто не знает в чем может быть проблема? Никто в utf не кодирует?
-
# cat | rcode -futf8 -tcp1251 | perl -pnle \'use encoding "cp1251", STDOUT => "utf8"\'
Тестовая строка
^D
Тестовая строка
#
-
arto
и где это писать?
у меня скрипт просто выдает текст по запросу в разных кодировках, только utf глючит.
-
perldoc encoding
-
так я все делаю так как в perldoc, вот и спраштваю из-за чего может не работать?
-
вот фрагмент кода:
if($code == 1){
print "Content-type: text/html\\n\\n";
print <<"(HTML_NOW)";
document.write("");
(HTML_NOW)
}elsif($code == 2){
print "Content-type: text/html\\n\\n";
@mybanner[1] = translate(\'win\',\'koi\',@mybanner[1]);
print <<"(HTML_NOW)";
document.write("");
(HTML_NOW)
}elsif($code == 3){
print "Content-type: text/html\\n\\n";
@mybanner[1] = translate(\'win\',\'iso\',@mybanner[1]);
print <<"(HTML_NOW)";
document.write("");
(HTML_NOW)
}elsif($code == 4){
print "Content-type: text/html\\n\\n";
use encoding "cp1251", STDOUT => "utf8";
print <<"(HTML_NOW)";
document.write("");
(HTML_NOW)
}
if($code == 1 || $code == 2 || $code == 3){
no encoding;
}
уникод здесь не пашет, если no encoding убрать не пашут другие кодировки.
-
даже и не знаю чего сказать...
слишком много ошибок.
-
Ну вообще первоначально все выглядело так, это я уже наворотил, чтобы хоть как-то заработало:
print "Content-type: text/html\\n\\n";
if($code == 1){
#ничего не меняем
}elsif($code == 2){
@mybanner[1] = translate(\'win\',\'koi\',@mybanner[1]);#отдельная ф-ция
}elsif($code == 3){
@mybanner[1] = translate(\'win\',\'iso\',@mybanner[1]);#отдельная ф-ция
}elsif($code == 4){
use encoding "cp1251", STDOUT => "utf8";
}
print <<"(HTML_NOW)";
document.write("");
(HTML_NOW)
Теперь можете подсказать?
-
perldoc -f use
-
не помогает!
пишу "no encoding" после вывода use encoding "cp1251", STDOUT => "utf8";
тогда utf8 не работает, а если не пишу "no encoding" тогда все в utf8.
-
такое впечатление, что вы не знаете как работает use, и не читали perldoc encoding
-
Читал. Из perldoc:
# A simple euc-cn => utf-8 converter
use encoding "euc-cn", STDOUT => "utf8"; while(<>){print};
# "no encoding;" supported (but not scoped!)
no encoding;
# an alternate way, Filter
use encoding "euc-jp", Filter=>1;
# now you can use kanji identifiers -- in euc-jp!
Т.е. вначале utf, а потом euc-jp. Но у меня этот no encoding почему то не срабатывает...
-
arto
понятно, вообщем не было чего ответить, НО сумничал...
-
Biggelow
arto хотел сказать, что "use" отработает до начала всех проверок (разница require и use), а в "perldoc Encoding" - тоже есть вся нужная вам информация.
А вообще:
use Encode;
my $string = "Привет мир!";
Encode::from_to($string, \'windows-1251\', \'utf8\');
print $string;
-
# print "Тестовая строка" | perl -plne \'BEGIN{ use encoding "koi8-r",STDOUT => "cp1251"}\' | iconv -f CP1251 -t KOI8-R
Тестовая строка
# print "Тестовая строка" | perl -plne \'BEGIN{ use encoding "koi8-r",STDOUT => "utf8"}\' | iconv -f UTF8 -t KOI8-R
Тестовая строка
#