- ベストアンサー
UNIX上で文字コードの一括変換はできますか?
UNIX上で、文字コードを変換したいのですが、今まではSJISからEUCといった変換にnkfを使用してきましたが、nkfだと1ファイル毎でしか文字コードを変換できませんでした。1行のコマンドでそのディレクトリ内の全てのファイルの文字コードを変換してくれるコマンドはありますでしょうか? UNIX上で実現できれば、Perlでもなんでも結構です。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
for filename in *; do nkf -Se $filename > $filename.euc; mv $filename.euc $filename; done と一行で打てばできるかと。
その他の回答 (1)
- systemv
- ベストアンサー率66% (2/3)
回答No.2
Perlそのものには文字コードの識別機能が無いので、jcode.plや、Jcode.pmを使うことになります。 (最新の5.8では標準モジュールEncode.pmでできるようですが、まだ環境としてはレア) なので、シェルでやるのがベストでしょう。 シェルの種類は難ですか?cshならforeachなども使えますが、#1さんの答えが無難でしょうか。 ちなみに、nkfを-Seで実行すると、一度変換済みのeucファイルが文字化けしてしまいます。(SJISとして読みこむため)なので、-eだけつけることお勧めします。 for file in * do nkf -e $file > $file.euc mv $file $file.old mv $file.euc $file done ちなみに、こっちは各行で改行を入れてください。
お礼
コマンドラインで、for文等が使えるとは思っていませんでした。素晴らしいテクニックありがとうございました。