- 締切済み
perl cgi のエンコード SHIFT->UTF-8
こんにちは初心者です。 現在、既存のperl cgiをカスタマイズしております。 エンコードをshift_jisからUTF8に変更したいのですが、表示はCGI自体をUTF-8に変更し普通に見ることができるのですが、書き込みをしようとすると文字化けがおこります。 jcode.plをjcode.pmに変換すればよいらしいまでは分かったのですが、どこをどう変換すればいいのかjcode.pmのサイトを見ても理解できません。簡単な説明サイト紹介やアドバイス等をいただけませんでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- chaimasuka
- ベストアンサー率57% (26/45)
> jcode.plをjcode.pmに変換すればよいらしいまでは分かったのですが、 > どこをどう変換すればいいのか CGI プログラム中に、 &jcode'convert(\$line, "euc", "sjis"); とか &jcode::convert(\$line, "euc", "sjis"); のような記述がないでしょうか? jcode.pl によって、 「どの変数」を「何の文字コード」から「何の文字コード」へ変換しているのかを、まず知る必要があります。 jcode.pl の使い方については、 「jcode.pl の私的な解説書」が詳しいです。 ↓参考URL
- uki629
- ベストアンサー率23% (40/172)
>jcode.plが使用されています。この場合jcode.pmを使えばよろしいいんでしょうか? 現状ですでになにかしらの文字コード変換が行われているってことですね。 でUTF-8に対応させるためにjcode.pmを使うってことですね。 まず確認しないといけないのがjcode.pmがインストールされているかどうかですね。 通常はサーバ管理者がCPANでインストールするけど http://tech.bayashi.net/faq/jcodepm.html でのように強制的にインストールできないことも無いけど これでサーバ管理者から怒られても知らない。
- uki629
- ベストアンサー率23% (40/172)
プログラムの文字コードはUTF-8と考えていいんですね? ・プログラムがSJISで出力データをUTF-8ではなくて ・プログラムがUTF-8で出力データもUTF-8ということですよね? >表示はCGI自体をUTF-8に変更し普通に見ることができるのですが、書き込みをしようとすると文字化けがおこります。 その書き込みページ(html)の文字コードは? 書き込みページがSJISならプログラムでそのページから取得したデータを UTF-8に変換(ここでjcode.plまたはJcode.pmを使う)の必要があります。 ただ 入力htmlがUTF-8でプログラムもプログラムから出力されるものもUUTF-8なら 文字コード変換は必要ないはずなんですけどね。
補足
回答ありがとうございます。 もともとのモジュールはperl cgiと表示用のhtmlテンプレートで構成されており、文字コードはすべてshift_jsでした。 オークションスクリプトになります。 テンプレートHTMLとCGIすべてUTFにしました。見るだけであれば通常通り表示されますが、書き込み等を行うと書き込まれた文字だけが文字化けしてしまいます。jcode.plが使用されています。この場合jcode.pmを使えばよろしいいんでしょうか? またjcode.pmのサイトを見たのですが、なんとなくは分かるのですが具体的な変更方法がわからず困っています。 またもうひとつですが、CGIはすべてUTFにしたのですが書き込み等を記録するデータログファイル(CGI)をUTFに変換しようとしても最初のデータが書き込まれるまではゼロバイトなのでUTFに変換しても認識しないのかわかりませんがエディタで開くとshift_jisとなってしまいます。 ゼロバイトのファイルをUTFにしてもだめなのかと思いUTF(BOM)にすると3バイト増えエディタで開くとちゃんとUTF(BOMあり)として認識されます。このときこのBOMというのはBOMなしのUTFスクリプトと混在させて問題等は起こらないのでしょうか?
- Suzi
- ベストアンサー率38% (130/334)
http://openlab.jp/Jcode/index-j.html の「使用例」にちょうど、jcode.plをjcode.pmに変換することが記されています。
補足
jcode.pmはサーバインストール済みです。 またperlのバージョンも問題ありません。