Perl один лайнер для преобразования из shiftjis в utf8

Я пытаюсь использовать следующий лайнер для преобразования файла из кодировки shiftjis в utf-8, и он не работает. Есть ли полезные умные люди?

perl -i.bak -e 'use utf8; use Encode qw(decode encode);  my $ustr = Encode::decode("shiftjis",$_); my $val = Encode::encode("utf-8",$ustr);  print "$val";' filename 

Я довольно новичок в кодовых страницах, и в Интернете, похоже, полно всевозможных сложностей по этому вопросу. Я просто хочу один лайнер. Входной файл и выходной файл выглядят одинаково.


person ojblass    schedule 04.11.2013    source источник
comment
Что вы имеете в виду под не работает? С 6,3 тысячами представителей вы должны знать, чтобы включить это в свой пост.   -  person Jim Garrison    schedule 05.11.2013
comment
Входной файл и выходной файл одинаковы.   -  person ojblass    schedule 05.11.2013
comment
Клянусь, это будет кому-то полезно.   -  person ojblass    schedule 05.11.2013


Ответы (2)


Вы забыли переключатель -n, который будет перебирать каждую строку ввода, загружая одну строку за раз в $_ и выполняя код, указанный в аргументе -e.

Более кратко, вы могли бы написать свою программу как

perl -MEncode -pi.bak -e '$_=encode("utf-8",decode("shiftjis",$_))' filename
person mob    schedule 04.11.2013
comment
Спасибо был долгий день! - person ojblass; 05.11.2013

Perl — странный выбор для этого, учитывая, что для этого уже есть стандартная утилита:

iconv -f shift-jis -t utf-8 filename

Конечно, это не позволяет легко редактировать файл на месте, но есть также recode, который каким-то образом также установлен в моей системе :)...

recode shift-jis..utf-8 filename

Или используйте moreutils:

iconv -f shift-jis -t utf-8 filename | sponge filename

Хм. Похоже на TMTOWTDI.

person Eevee    schedule 05.11.2013
comment
иногда лучше, чем iconv: p3rl.org/piconv (поставляется с Perl) piconv -f shift-jis -t utf-8 filename - person daxim; 05.11.2013
comment
@daxim вау, и я тоже недавно узнал о psed. perl, по-видимому, поставляется со всей базовой системой Unix! - person Eevee; 05.11.2013