- 締切済み
cgi出力での文字コードについて
下記のソースをsjisで作っていて、出力するdata.txtをuft-8で保存したいです。 どのようにすればよいでしょうか? 下記ソースでは、data.txtはsjisになっています。 尚、htmlはsjisなのでそのまま使用したいです。 どなたか教えてください。 宜しくお願いします。 ############################# #!/usr/local/bin/perl require 'jcode.pl'; require 'cgi-lib.pl'; &ReadParse; $datafile='data.txt'; ←これの保存のみutf-8にしたい open(FH,">$datafile"); print FH "$in{'name'}"; close(FH); rint "Content-type:text/html\n\n"; print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>"; print "<html><head></head><title>テスト</title><body>\n"; print "<center>入力完了しました。</center><hr /><br>\n"; print "<b>名前:</b>$in{'name'}<br>\n"; print "<hr />\n"; print "</body></html>";
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
何もしなければ、Perlは書いたままの文字を、バイト列として出力します。 たとえば、「 print "テスト" とShift_JISであれば print "\x83\x65\x83\x58\x83\x67" と同じです。 これを受けとった側で、Shift_JISとして解釈すると、 テスト になり、別の文字コードとして解釈すると「文字化け」になります。 これと同様に、UTF-8のバイト列にしたものを出力すれば、UTF-8の文字列になります。 $datafile='data.txt'; open(FH,">$datafile"); print FH UTF8に変換した$in{'name'}; close(FH); という感じに。 ただ、一般に出まわっているjcode.plはUTF-8に対応していません。 最近のPerlならEncodeモジュールを使って変換します
- ORUKA1951
- ベストアンサー率45% (5062/11036)
あまりにも無茶な注文です。 jcode.plはUTF-8には対応していません。 use:jcode; でjcode.pmならUTF-8が扱えます。 また、標準ライブラリのencode.pmでも良いです。 もちろん、printする前にUTF-8に変更しておかないと print FH "$in{'name'}"; だけじゃダメです。 HTML出力の間違ってます。 <meta>は<head>内で、かつ日本語が登場するより前でないとなりません。 >下記のソースをsjisで作っていて、 詳細は省きますが、それは、Perlでは禁忌です。少なくともeuc-jpでプログラムを書かないと深刻なトラブルに合います。今動いているのは偶然です。 最近のperlはUTF-8が使用できますので、そのままUTF-8で書くほうが楽です。
- play_with_you
- ベストアンサー率37% (112/301)
まずは検索しましょうね。 https://www.google.co.jp/search?q=perl+open+%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89 ついでに、 ・jcode.plは古いのでやめよう https://www.google.co.jp/search?q=Jcode.pm ・HTMLはせめてヒアドキュメントで出力しよう https://www.google.co.jp/search?q=perl+%E3%83%92%E3%82%A2%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88
補足
ありがとうございます。 もちろん検索して調べてみましたが、出力のみutf-8にするといった情報が少なく、あるにはあったのですが同じようにしてもエラーになってしまいました。 上記ソースで行いたいのでよろしければお教えいただけると幸いです。