- ベストアンサー
文字化け問題とは?
- 文字化け問題とは、テキストデータが正常に表示されないことを指します。
- 文字化けは、文字コードの設定ミスやデータの変換エラーなどが原因となります。
- 文字化けが発生した場合、正しい文字コードを設定するか、データの変換を行う必要があります。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>スクリプトのコード体系とcharsetの指定がずれていませんか? > >上記の意味がわからなくて・・・。どうしたら良いのですか?? この件ですが、angelyがおつくりになったPerlスクリプトの >ありがとうございました。 >至急お送りいたします。 の文字は、EUC,シフトJIS,JIS漢字のいずれで作成されてますか?この文字のコードとcharsetで指定したコードの種類が違えば、化けますよ。 FTPでファイル転送しているのであれば、FTPで漢字コード変換をかけていることもありますので、確認してみてください。
その他の回答 (5)
- leaz024
- ベストアンサー率75% (398/526)
> &jcode'convert(*form,'sjis'); の記述が、気になりますね。 formって変数は、多分クエリーを分解して「$FORM{KEY}=VALUE」となるようにセットしたハッシュだと思うんですが、どうでしょうか? もしそうなら、こんな風に書き換えてみて下さい。 if ($ENV{'REQUEST_METHOD'} =~ /POST/i) { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach (@pairs) { my ($key,$val) = split(/=/,$_); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode::convert(\$val, 'sjis'); $FORM{$key} = $val; } # 「Perl 5」を想定しています。
補足
お返事ありがとうございます。 教えていただいた通り、スクリプトを変更したんですが こんどは表示ができなくなってしましました。 formって変数は、多分クエリーを分解して「$FORM{KEY}=VALUE」となるようにセットしたハッシュだと思うんですが、どうでしょうか? 上記の内容の意味がわからなくて・・・。 マニュアル本についてきたCD-ROMをコピーして使っているので 自分ではとくに何もしていないんです・・・。
- arata
- ベストアンサー率49% (139/279)
もしかして、間違っていたら「ごめんなさい」なので すが、 &jcode'convert(*form,'sjis'); って、入力側(ウェブブラウザ→サーバー)のコード をシフトJISに変換している部分ですよね? これは、出力(サーバー→ウェブブラウザ)するデータ の文字コードとは関係ないと思うのですが、スクリプト のコード体系とcharsetの指定がずれていませんか?
補足
見捨てないでくれてありがとうです。 マニュアル本を読んだら、&jcode'convert(*form,'sjis'); は入力側の文字変換のことだと書いてありました。 じゃあ、文字化けには関係ないですよね? スクリプトのコード体系とcharsetの指定がずれていませんか? 上記の意味がわからなくて・・・。どうしたら良いのですか??
- arata
- ベストアンサー率49% (139/279)
print "Content-Type: text/html;charset=Shift_JIS\n\n"; 上記以外に、メタタグをつけると直るかもしれません。 print << "END_OF_HTML"; <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS"> <HTML>
補足
何度もありがとうございます。 メタタグをつけてみたのですが、状況は変わらすです・・・。 送信ボタンを押してからの画面が文字化けするんですけど、 その前の画面のオーダーフォームは文字化けしないんですよぉ。 これはなぜなんでしょう? # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); というスクリプトに関係あるのでしょうか??
- arata
- ベストアンサー率49% (139/279)
まず、charsetのところですが、-ではなくて、 charset=だったと思うのですが。 それから、Perlかシェルのスクリプトだと思います が、スクリプトの文字コードとContent=で指定する 文字コードは一致させてください。 スクリプトがシフトJISならShift_JISですし、EUC ならeuc-jpとしてください。 では
補足
ありがとうございます。 スクリプトの文字コードは # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); です。なので、Content・・・では Shift_JIS にしました。 それでも文字化けが生じます。 なぜでしょう?? おわかりになりましたら、教えてください。
- ryouki
- ベストアンサー率50% (11/22)
文字コードは何をお使いでしょう?わかんない?(^^; わかんないなら、その化けた CGI を表示させた状態で、エンコードを変えてみましょう。 InternetExplorer なら、上メニューの[表示]-[エンコード]。 ShiftJIS/EUC/JIS が、日本語のコードです。どれに当てはまるか試してみる。 まぁ、普通の Win9x とか Mac とかなら Shift-JIS 使ってる気がするので、 print "Content-type:text/html\n\n"; の行を print "Content-type:text/html;charset-Shift_JIS\n\n"; ってしてあげると幸せかも知れません。
補足
早速ありがとうございます。 エンコード調べてみました。 シフト JIS というものになっていたので、 スクリプトを教えていただいたように(print "Content-type:text/html;charset-Shift_JIS\n\n"; ) 直してみたのですが、結果は同じでした。 どうしたらよいのでしょうか??
お礼
arataさん、素敵です。まさに、『FTPでファイル転送しているのであれば、FTPで漢字コード変換をかけていることもありますので、確認してみてください。』でした。感動です。何度も答えてくれてありがとうございます。以前質問出したときは、見捨てられたので、今回もいつ見捨てられるんじゃないかと心配でした。 インターネットって簡単に手を引こうと思えば引けるのに・・・。今度は上記のものを自分用のスクリプトに書き換える作業です。また何かあったら質問にのせるので、お願いしますね。 ではでは、本当にありがとうございました。