• 締切済み

ActivePerl UTF-16の変換

Active PerlをWindows上で利用しています。 (This is perl, v5.8.7 built for MSWin32-x86-multi-thread) 今回、毎回UTF-16という文字コードで生成されるテキストデータを Perlスクリプトで処理させたいのですが、sjis等への文字変換を スクリプト内で行うにはどうすれば良いでしょうか。 use Encode; では、"utf8"はありますが、"utf16"というのはありません。 Perlスクリプトに食わせる前に、(テキストエディタなどで手動で文字エンコードさせるのではなく) バッチ処理的に文字列変換できる方法でも構わないのですが、 何か良い方法がありましたら、お教えください。よろしくお願いします。

みんなの回答

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.1

>今回、毎回UTF-16という文字コードで生成されるテキストデータを きちんとBOMをつけて吐き出してもらわないと どうにもならないので,BOMがついてるという前提で. >use Encode; では、"utf8"はありますが、"utf16"というのはありません。 Encode::Unicode -- Various Unicode Transformation Formats のマニュアルをご覧ください. EncodeモジュールはPerlの全ソースコードの半分以上をを占める 巨大なものなので,UTF**系はもちろん 普通に使うものでUnicodeとの対応表があるものは 大抵ありそうです. なお,nkfの新しいもの(v.2以降かな)ならUTF16LE,UTF16BEとかを きちんと変換したくれたように記憶しています.

supob
質問者

補足

返信が遅くなりました。 >>きちんとBOMをつけて吐き出してもらわないと >>どうにもならないので,BOMがついてるという前提で. もったいぶった書き方をしましたが、adduseres.exe とかいう Windowsに添付のツールがありますが、これを /d:u オプション付きで 実行した結果、作成されるログ(テキスト)ファイルです。 >>Encode::Unicode -- Various Unicode Transformation Formats >>のマニュアルをご覧ください. マニュアルをネット検索して、読んでみました。 Encode::Unicodeのモジュールを別途追加(ppm)してやる必要があるということでしょうか。 (生半可知識で恐縮ですが) >>なお,nkfの新しいもの(v.2以降かな)ならUTF16LE,UTF16BEとかを >>きちんと変換したくれたように記憶しています. 結果的に他のツールですが、utf16→8へ変換してくれるフリーソフトが ありましたので、それをワンクッション入れて、その後、Encodeで UTF-8→Sjisへ変換するというベタな処理にして、現状はしのいでいます。 ノド元過ぎれば、これ以上手を打たないようになってしまいますが、 方法としては、ちょっとイマイチかなと感じております。

関連するQ&A