2013-11-04 72 views
0

我正在嘗試以下一個班輪將文件從shiftjis編碼轉換爲utf-8並且其不工作。任何有用的聰明人可用?Perl的一個班輪將從shiftjis轉換爲utf8

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 

我對代碼頁很新穎,網頁似乎充斥着各種複雜的主題。我只想要一個班輪。輸入文件和輸出文件看起來是相同的。

+3

「不工作」是什麼意思?有了6.3K代表,您應該知道通過知道在您的文章中包含該代碼。 –

+0

輸入文件和輸出文件相同。 – ojblass

+0

我發誓這會對別人有幫助。 – ojblass

回答

2

你忘了-n開關,這將遍歷輸入的每一行,在加載一次一行到$_並執行在-e參數所提供的代碼。

更簡潔,你可以寫你的程序像

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

謝謝你過了漫長的一天! – ojblass

+0

'perl -MEncode = from_to -i.bak -pe'from_to $ _,「shiftjis」,「utf-8」'filename' – ikegami

1

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。

+0

有時比iconv更好:http://p3rl.org/piconv(附帶Perl) 'piconv -f shift-jis -t utf-8 filename' – daxim

+0

@daxim哇,我剛剛也學了''psed'。 perl顯然與整個unix基本系統一起運行! – Eevee