- ベストアンサー
data.cgiの文字コードをUTF-8に変換する方法
- data.cgiの文字コードをUTF-8に変換する方法を教えてください。
- 現在、data.cgiの文字コードはSJISですが、UTF-8に変換したいです。
- xrea.comのサーバを利用しており、上記のスクリプトを実行するとサーバエラーが発生しています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ではシェルでの作業をしない場合の手順を。 記憶があやふやな部分がありますので、どっか間違っているかもしれません。 何か問題があったらいってください。 まずJcode-2.06.tar.gzをダウンロードするのは同じです。 手元のマシンの適当なディレクトリでアーカイブをといてください。 cd Jocde-2.06 すると、以下のようなファイルとディレクトリが見えます。 ドライブ D のボリューム ラベルがありません。 ボリューム シリアル番号は AC5F-5FE1 です D:\work\jcode\Jcode-2.06 のディレクトリ 2006/12/16 04:28 <DIR> . 2006/12/16 04:28 <DIR> .. 2006/07/02 16:56 2,932 Changes 2006/07/02 16:56 7,476 Changes.ver0X 2006/07/02 16:56 <DIR> Jcode 2006/07/02 16:56 23,095 Jcode.pm 2006/12/16 04:28 24,289 Makefile 2006/07/02 16:56 722 Makefile.PL 2005/02/18 12:27 696 MANIFEST 2006/07/02 16:56 329 META.yml 2006/07/02 16:56 711 README 2006/07/02 16:56 <DIR> t 2006/07/02 16:56 <DIR> Unicode これらのファイルのうち、 Jcode.pm Jcode/Constants.pm Jocde/H2Z.pm Jcode/Nihongo.pod Jcode/Tr.pm Jocde/_Classic.pm Jcode/Unicode/Constants.pm Jcode/Unicode/NoXS.pm を、これらのディレクトリ構成を生かしたまま、サーバーに転送してください。 お勧めは、*.cgiファイルのあるディレクトリと同じところにJcode.pm を、 その他のものをその下の Jcode/ というディレクトリ以下にするのが手間がかからないです。 インストールはこれで終わりです。 つぎにcgiスクリプトのほうを修正します。 まずスクリプトの先頭のほうで use Jcode; とします。 SJIS から UTF-8への変換は $sjis にSJISでのデータがあるとして $utf8 = jcode($sjis)->utf8: で、$utf8に変換された結果が得られます。 ほかにも色々使い方があるのですが、とりあえずこれだけ使えれば 最低限の用は足せるだろうと思います。
その他の回答 (4)
- sakusaker7
- ベストアンサー率62% (800/1280)
ああ、5.6ですか。じゃあ use Encodeはできなくて当然ですね。 であればJcode.pm等のモジュールをインストールする必要があるのですが、 シェルが使えるのか使えないのかで手順等変わりますのであらかじめお聞きしました。 また、シェルが使えなくてもなんとかできないこともありません。 詳しい場所とかは書けませんが、そういう環境でJcode.pmを インストールして使っていますので。 次の手順ですが、 http://search.cpan.org/CPAN/authors/id/D/DA/DANKOGAI/Jcode-2.06.tar.gz から、Jcode-2.06.tar.gz をダウンロードして、サーバーにアップロードしてください。 そうしたら、 tar xfvz Jcode-2.06.tar.gz でアーカイブをといて、 cd Jcode-2.06 ディレクトリを移ったら perl Makefile.PL INST_LIB=モジュールを置くディレクトリ を実行してください。ここでINST_LIBに指定するのはたとえば /home/userhoge/public_html/cgi-bin/lib のようなディレクトリです。指定しないとシステム共通のディレクトリに インストールに行ってしまうので多分まずいです。 この例ではCGIを置くところ(cgi-bin)の下にlibというディレクトリを掘って そこにしています。 上記のコマンドを実行すると Makefileができていますので、 make make test make intall でインストールできます。 とりあえずここまでできるかやってみてください。 シェルでの作業をしたくない場合には補足で言ってくだされば その手順を改めて説明します。
補足
ありがとうございます。 大変お手数をおかけして申し訳ございませんが、シェル以外の方法を説明していただけると大変有難いです。宜しくお願いいたします。
- sakusaker7
- ベストアンサー率62% (800/1280)
ログを見るなどできるのであれば、本当のエラーが何なのかを確かめてみてもらいたいのですが、 多分、@INCに登録されているディレクトリで Encode.pmが見つからなかったというものでしょう。 とりあえずShiftJIS→UTF-8への変換をするのであれば、 Unicode::Japanese http://search.cpan.org/~hio/Unicode-Japanese-0.38/lib/Unicode/Japanese.pm Jcode.pm http://search.cpan.org/~dankogai/Jcode-2.06/Jcode.pm といったモジュールでも行うことができます。 これらはダウンロードしてきてインストールする必要がありますが シェルを使うことは可能なんでしたっけ? シェルが使えなくてもなんとかできなくはありませんが。 とりあえず、 ・サーバー上のシェルを使うことができるか ・サーバーにインストールされているPerlのバージョン を教えていただけますか? Perlのバージョンは Perlの特殊変数 $] の値を出力するCGIでも作って 確かめてください。
お礼
ありがとうございます。 先ほど調べてみましたところ、 Perlのバージョンはperl version: 5.006001 (5.6.1) でした。 シェルは使えるようですが、使えるコマンドにかなりの制限があるそうです。そして私自信、シェルを使ったことがありませんので、出来るならスクリプトのみでUTF-8に変換できれば嬉しいのですが、このPerlのバージョンではシェルを使わないと無理なことなのでしょうか。
- sakusaker7
- ベストアンサー率62% (800/1280)
再度確認なんですが、質問に貼り付けてあるスクリプトはInternal Error に ならずに実行できているんでしょうか? 申し訳ありませんが、わたしはxrea.comの事情はわかりませんので、 Encode.pmの使用に関して制限があるなどの情報はもっていません。 Perlのバージョンが 5.8.0 以降であれば、標準モジュールなので 某大手プロバイダのように標準モジュールすらインストールしていないので なければ問題なく使えると思うのですが。
お礼
はい。上記スクリプトは正常に動作しております。 他の配布されているいろいろなスクリプトでも試してみましたが、 use Encode; や、 Encode::from_to($f_data1, 'sjis', 'utf-8'); #追加 Encode::from_to($f_data4, 'sjis', 'utf-8'); #追加 を記入するとエラー表示になってしまいます。 他に、UTF-8に変換する方法はないでしょうか。
補足
perl version: 5.006001 (5.6.1) CGI: 3.05 Jcode: 0.88 NOMODULE: not available requre 'jcode.pl': OK スクリプトを使ってPerlのバージョンを調べてみました。
- sakusaker7
- ベストアンサー率62% (800/1280)
提示されたスクリプトではUTF-8への変換をしていませんが、この状態で Internal Server Error (ですよね?)になるのでしょうか? それともUTF-8への変換を入れようとしたところでエラーが起きるようになったのでしょうか? 文字コード変換に使えるモジュールはいくつかありますが、 Perl 5.8.0以降標準でついている Encode.pmを使うのなら、 $f_data1 =~ s/ //g; Encode::from_to($f_data1, 'sjis', 'utf-8'); #追加 Encode::from_to($f_data4, 'sjis', 'utf-8'); #追加 print "$f_data1階 $f_data4\n"; のようにやればよいのではないでしょうか。 実際に使うときにはスクリプトの前のほうで use Encode; をしておくのをお忘れなく。
お礼
ご回答ありがとうございます。教えていただいた通りに記入しましたが、やはりエラーになっていまいます。use Encode;を何処に書いてもエラーになります。 サーバはxreaを利用していますが、このサーバーではutf-8で書き出すことは不可能なのでしょうか。
お礼
有難うございます。おかげ様で完成させることができました。ご丁寧にご指導いただき感謝いたします。