- 締切済み
Perlでのファイル出力における文字コード指定について
質問させて下さい。 Windows環境、ActivePerl ver5.8.6.811です。 現在、走らせるとテキストファイルが生成されるスクリプトを作成して使っているのですが、作成したテキストファイルに出力される文字データをUnicode(UTF16-LE)にすることは、可能でしょうか? 何もしないでいると、S-JISでの出力になってしまうのですが…。 参考になるサイトなどありましたら、教えて頂けたら幸いです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- omni2
- ベストアンサー率53% (33/62)
Jcode.pmのインストール方法ですが、 環境がWindowsの場合ですが、(それ以外はわかりません、ごめんなさい。) Windowsのコマンドプロンプトを開いて、 (XPなら[スタート]->[すべてのプログラム]->[アクセサリ]->[コマンドプロンプト]をクリック) ppmと入力してEnterボタンを押してください。 すると、 ppm> という表示になりますので、 ここで、 ppm>install Jcode と入力してEnterキーを押してください。 Jcode.pmモジュールがまだインストールされていない場合は、自動的にインストールされるはずです。 すでにインストールされているなら、 Note: Package 'Jcode' is already installed と表示されるとおもいます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
すいません、#2は、以下のように修正してください use encoding 'shiftjis'; binmode STDOUT => ":raw:encoding(UTF-16LE)"; binmode STDERR => ":raw:encoding(UTF-16LE)";
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>書いて頂いたソース部分は、ソースの一番上のほうに書けばいいのでしょうか? 一番最初に書きます。 >「script produced no output」 >となってしまい、うまく動作してくれません。 件のメッセージは、CGI中で実行した時にスクリプトにエラーが有って、実行できないので出力が無かった時に表示されます。 なので、いきなりCGIで動かしてみるのではなくて、 まずは、コマンドとして実行してみてエラーを潰してからCGIでの実行をするべきだと思います。 あと、UTF-16LEを使用する理由はなんですか? 特に理由がないようなら use encoding 'shiftjis'; binmode STDOUT => ":encoding(UTF-8)"; binmode STDERR => ":encoding(UTF-8)"; も試してみてください。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ソースをシフトJISで作成していて 出力をUnicode(UTF16-LE)にするには、 #---------------------------------------------------- use encoding 'shiftjis'; binmode STDOUT => ":encoding(UTF-16LE)"; binmode STDERR => ":encoding(UTF-16LE)"; print "あいうえお\n"; ---------------------------------------------------- の様にすればいいです。 シフトJISをうまくマッピングできないことがあるので、 use encoding 'shiftjis'; より use encoding 'utf8'; #ソースを最初からUTF-8で記入する ほうがいいです。
- omni2
- ベストアンサー率53% (33/62)
UTF16に変換するモジュールはあるみたいです。 Unicode::Stringあたりで検索すれば出てきそうです。 でも、UTF16-LEってなんだろ?? すみません、勉強不足で・・ 本当に変換できてるかどうか未確認ですが、一応書いときます。まちがってたらすみません。 use Jcode; use Unicode::String qw(utf8 utf16); my $data = utf8( Jcode->new('これはテストだよ')->utf8 )->utf16; if(open(WRITE,"> test.txt")){ print WRITE $data; close(WRITE); }
お礼
ご回答ありがとうございます。 早速、書いて頂いたソースを使って試行錯誤してみたのですが、私の力不足からか…どうもだめみたいです…。CGIエラーになってしまいます。 とりあえず、「use Jcode;」を使うには、Jcode.pmというものをインストールしないと駄目(?)みたいなので、してみたのですが、それでも出来ません(ちゃんとインストールできてるのか微妙です…)。 「script produced no output」になってしまいます。 せっかくご回答くださったのに、申し訳ありません。 補足ですが、UTF16-LEとはWindowsが標準でサポートしてるUnicodeの規格だったと思います。
お礼
ご回答ありがとうございます。 書いて頂いたソース部分は、ソースの一番上のほうに書けばいいのでしょうか? 早速、やってみたのですが、 「script produced no output」 となってしまい、うまく動作してくれません。 私が初心者なので、書き加え方を間違っている可能性が非常に高いのですが…。 もう少し試行錯誤してみようと思います。 せっかくご回答くださったのに、申し訳ありません。