他所にあるすこし古いMacOS(開発環境なし)でワンライナーを使ってUTF-16LE with BOMを生成(タイトルなげーよ)
都内某所の制作事務所での要望:
InDesignのタグテキストをUnicodeネイティブで取り込みたいんだけど、どうすればいいの?
InDesignのタグテキストでUnicodeネイティブで取り込むには、UTF-16LE(あるいはUTF-16BE) with BOMである必要があります。
ですから、nkfコマンドを使って
$ nkf -w16L original.txt > output.txt
でよいのでは? はい終了。
え? nkfないですって? じゃあApple Developers Toolsをインストールすると自動的にgccなんかの開発環境も入るからソースからコンパイルしてください*1 ん? 管理者の許可? そ、そんなこと自分で言ってくださいよ。ぼくは部長さん怖いので言い出す勇気ないですよ。第一、MacOS10.5.8とかってどのバージョンのDevTools入れればいいかわかんないし...(逃げ腰)。
そうだiconvコマンドを使いましょう。iconvならMacOSのデフォルトで入ってるから、怒られる心配ありません! ←重要
$ iconv -f UTF-8 -t UTF-16LE original.txt > output.txt
これでいいんじゃないですか? え?BOMがついてない? BOMがついてないとInDesignのバージョンによってはタグテキストとして認識されない、と。*2
むう... ついてないならsedで後付けすればいいじゃん!
$ iconv -f UTF-8 -t UTF-16LE original.txt | sed '1s/^/\xfe\xff/' > output.txt
おお、ストリームエディタの面目にゃくにょ(いえてない)。んが、BOMじゃなくファイル先頭に文字として「xfexff」が付いちゃってますがな。引用符をシングルクォーテーションからダブルクォーテーションに変えても制御文字に展開してくれない。よくよく調べたら、bashのクォートってそういうものらしい。すなわち、
$ iconv -f UTF-8 -t UTF-16LE original.txt | sed $'1s/^/\xfe\xff/' > output.txt
と書けばよいわけですね。
そもそものタグ付けやテキスト処理をrubyでやるなら、こんな感じのシェル芸でワンライナーになります。よき!
$ ruby thisfile.rb original.txt | iconv -f UTF-8 -t UTF-16LE | sed $'1s/^/\xff\xfe/' > tag.txt
最後に...
このブログほったらかしでぜんぜん更新してないですが、とりあえずせうぞー死亡説だけは否定しておきます。
*1:パッケージとか使ってる人は macにnkfコマンドがないだと!?じゃあ入れよう! - Qiita あたりを参考にしてください