バッチ用の文字コード変換をPHPで
EUC-JP⇒UTF8変換をパイプで行う。
コマンドラインで文字コード変換する。nkfの使い方を調べるのが面倒だったので、コード書いた。
電車の中でネットにつながらなかった。apt-getで入らなかったので、仕方なく作った。
一つのファイルを変換
cat foo.txt | ./encode.php
まとめて変換
for $i in `ls` ;do cat $i | ./encode.php > $.utf8.txt ;done
encode.php
#!/usr/bin/php <?php $str = file_get_contents("php://stdin"); $str = mb_convert_encoding($str, "utf-8", "euc-jp"); file_put_contents("php://stdout", $str );
php://stdin と php://stdoutについて
詳しくはココに掲載されている.
サポートされるプロトコル/ラッパー ⇒ PHP 入出力ストリーム
http://jp.php.net/manual/ja/wrappers.php.php
PHP 5.2.1 より前のバージョンでは、これに関連する挙動にバグがあります。 これらのラッパーを使うのではなく、定数 STDIN, STDOUT および STDERR を使用することを推奨します。
今回は、STDOUT/STDINのペアを利用したが、出力にphp://temp や php://memoryを利用すると、ob_start多段ネストでコードの可読性低下を防ぐことが出来そうだね。