Perl one liner从shiftjis转换为utf8

时间:2013-11-04 23:15:08

标签: perl utf-8 shift-jis

我正在尝试以下一个衬垫将文件从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 

我对代码页很陌生,网络似乎充满了关于这个主题的各种复杂性。我只想要一个班轮。输入文件和输出文件看起来是一样的。

2 个答案:

答案 0 :(得分:2)

您忘记了-n开关,它会迭代每一行输入,一次加载一行到$_并执行-e参数中提供的代码。

更简洁地说,您可以编写类似

的程序
perl -MEncode -pi.bak -e '$_=encode("utf-8",decode("shiftjis",$_))' filename

答案 1 :(得分:2)

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。