LINUX.ORG.RU

perl и кодировки


0

0

Как стандартными средствами perl можно перекодировать текст в переменной из одной кодировки в другую.
Спасибо!

anonymous

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

мне нужно текст в переменной переконвертировать

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

Что-то типа такого

[r-asian@r-asian tmp]$ cat iconv.pl
#!/usr/bin/perl
open (A, "|iconv -f koi8-r -t cp1251|");
print A "Кодировка";
while(<A>)
{
        print $_;
}
close(A);

[r-asian@r-asian tmp]$ ./iconv.pl
йНДХПНБЙЮ

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

Пардон, всей кучей запихал :-))

#!/usr/bin/perl open (A, "|iconv -f koi8-r -t cp1251|"); $variable="Кодировка"; print A $variable; @lines=<A>; print @lines; close(A);

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

спасибо, вернусь с шашлыков - проверю!!! =)

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

Это не просто "не самый оптимальный вариант", это просто жопа, а не вариант. Представь, из твоего варианта сделали функцию, и вставили её в cgi-шку, которая получает данные откуда-то и конвертирует их в нужную клиенту кодировку. На каждый чих звать iconv(1)??? А когда эту цгишку позовут 100 пользователей сразу?

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

iconv - кривое говно, обламывающееся на 50% текстов. Лучше уж recode использовать, оно дуракоустойчивее.

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

2r_asian:
> Ну, согласный я, вариант не самый оптимальный, зато работает и выпить не просит :-)

Нет, твой вариант не работает _вообще_ :-(

Если бы ты использовал -w или use warnings, то увидел бы что-то типа:

Can't open bidirectional pipe at ./pipe.pl line 3.

Конструкция типа open(A, "|some_command|") просто не работает,
о чем недвусмысленно написано в perldoc -f open:

You are not allowed to "open" to a command that pipes both in and out,
but see IPC::Open2, IPC::Open3, and "Bidirectional Communication with
Another Process" in perlipc for alternatives.

> Ну вся, блин, пошел я пить йад и топитьса в Волге. :-((

Йад может немного подождать, а вот чтение perldoc perlipc тебе
явно срочно необходимо.

HTH

P.S. И пожалуйста - всегда use warnings и use strict

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

> P.S. И пожалуйста - всегда use warnings и use strict
Добавлю, всегда только про написании программы, и на стадии тестирования.
При ипользовании в работе эти две строчки лучше комментировать.
Потому что они жрут память немеренно.

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

> При ипользовании в работе эти две строчки лучше комментировать. > Потому что они жрут память немеренно.

Это, грубо говоря, ложь. strict вообще влияет, в основном, на компиляцию .

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

>iconv - кривое говно, обламывающееся на 50% текстов.
>Лучше уж recode использовать, оно дуракоустойчивее

iconv -f cp1251 -t utf-8 -c
                         ^^^
                  дуракоустойчивость:)

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