Perlプログラムの文字化け問題を解決する方法

このQ&Aのポイント
  • Perlで書かれたCGIプログラムがEUCで記述されており、ブラウザで実行すると文字化けしてしまう問題が発生しています。
  • nkfコマンドを使うことでファイルの文字コードをEUC-JPからUTF-8に変換できますが、それでも文字化けが解消されません。
  • 文字化け問題を解決するためには、ブラウザのエンコード設定をEUC-JPに変更する必要がありますが、この方法でも解決しない場合があります。
回答を見る
  • ベストアンサー

文字コードEUCのPerlプログラムが文字化けしてしまいます

Perlで書かれたCGIを実行しようとしているのですが、プログラムはEUCで記述されているそうです。nkf -g ***とするとEUC-JPとなります。 print " <META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">\n"; とも記述されているのですが、ブラウザで実行(閲覧)すると文字化けして、ブラウザのエンコードは、Unicode(UTF-8)になっています。 ちなみに、OSはCentOS5.2です。 どうやったら、EUCで記述されたCGIが文字化けせずに実行できるのでしょうか? teratermでサーバに接続語、viコマンドで表示しても文字化けしています。ファイルの文字コードをEUCからUTF-8にして(nkf -w ***)、ブラウザでアクセスしても文字化けしてしまいます。

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

1 メタタグの他に、レスポンスヘッダの content-type: で UTF-8 を指定したりしていませんか? レスポンスヘッダとメタタグと実際の出力内容で、文字コードを統一するのが基本です。 サーバー(Apache等)の設定によっては、文字コードの自由度が無いかも知れない点にも注意してください。 2 Perl が EUC で書かれていても、STDOUT に EUC が出力されるとは限りません。 encoding とかの使い方は、正しく理解されていますか? 3 teraterm + vi で確認する際は、teraterm での文字コード設定が重要なのはご存知ですよね?

関連するQ&A

  • phpMyAdminのみで文字化けするのですが、

    phpMyAdminのみで文字化けするのですが、どういった原因が考えられるでしょうか? また、そもそもこういうことって、あり得るのでしょうか <環境> ・MySQL 5.1.22-rc ・レンタルサーバー(phpMyAdmin - 2.10.1) ・WindowsXPのパソコン ・PHPの書籍に添付されていたサンプルプログラム <経緯> 1.元々は、EUC-JPで保存されていたPHPのサンプルプログラムなのですが、 UTF-8で保存すれば、mb_convert_encodingしなくてもすむのではないかと思い、、 UTF-8で保存しなおしました。 2.レンタルサーバーへSSH接続して、「テーブル作成」と「データ流し込み 」のコマンドを実行しました。 3.ブラウザで、サンプルプログラムの動作確認を行ったところ、日本語で データの新規登録・更新・削除が無事行えました。 また、表示も問題なく行われていました。 4.phpMyAdminを使い、データベースへアクセスしてみたところ、 何故かデータがすべて文字化けしていました。 5.phpMyAdminでエクスポートしてみたのですが、データは文字化けしたままでした。 6.データが壊れたのかと思ったのですが、ブラウザで、サンプルプログラムの 動作確認を再度行ってみたところ、日本語で正常に動作しています。 そういうものなのでしょうか。 <その他> ▼UTF-8で保存しなおした内容 $sql = mb_convert_encoding( $sql, "SJIS", "EUC-JP");となっていた箇所を削除しました。 また、 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">となっていた箇所を <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />へ変更し、 ファイルを自身を、UTF-8で保存しなおしました。 ▼MySQL の文字セット: UTF-8 Unicode (utf8) ▼MySQL の接続照合順序: utf8_unicode_ci

    • ベストアンサー
    • MySQL
  • XHTMLの文字コードのEUC-JPの文字化け

    いつもはHTML4.01で作業をしていて XHTMLはどうも不慣れなせいか 今、外注が作成したHPを修正していて 文字コードをEUC-JPにどうしても変更しなければならないのですが それがうまくいかず、文字化けが発生してます。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> を <?xml version="1.0" encoding="euc-jp"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> このように設定したら文字化けが発生しました。 どのように設定したら文字化けがなくなりますか?

  • EUCのファイルを開くとUTF-8になる

    文字コードがEUCのperlで書かれたCGIをブラウザで表示すると、UTF-8となっています。(自動認識と設定していた場合) その場合は、文字化けしてしまいます。 ブラウザの文字コードをEUCに変更すると、文字化けせず表示されます。 perlプログラムは、EUCで書かれているのに、ブラウザでは(自動認識と設定していた場合)、UTF-8となる理由はどこにあるのでしょうか? perlプログラムでは、METAヘッダにEUC-JPと記述されています。 ちなみに、サーバのOSはCentOSです。(httpd.confでは、UTF-8が設定されています)

  • euc-jp で文字化け

    euc-jp で文字化け euc-jp で打ち込むと、ブラウザ上では正常に映るのですが、ブラウザからソースを見ると 文字化けしてしまいますし、そういうサイトをよく見ます。これはSEO上影響は ないのでしょうか? ブラウザはIE7です。

    • ベストアンサー
    • HTML
  • コピーすると文字コードが変わっちゃう

    プログラムを(ちなみにPHP)エディター(ちなみに秀丸)で入力して保存時にエンコードの種類を「Unicode(UTF-8)」で保存 もちろんプログラム(HTML/PHP記述)では <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> を指定しています 実行すると文字化けも起こらず正常にホームページが完成しました それをコピーして別のサーバーにアップすると正常にホームページが開かないんです 文字化けだけでなくソースが画面に表示されました そのソースも文字化けです コピー先をエディターで開くと「日本語(Shift-JIS)」になっていました コピー元は「Unicode(UTF-8)」です なぜでしょう? そもそも「Unicode(UTF-8)」をコピーするには単純にコピーしてはいけないのでしょうか? プログラムの量が結構あるのでこの「日本語(Shift-JIS)」を一括して「Unicode(UTF-8)」に保存できるようなツールはないのでしょうか?

  • 更新を繰り返すと文字化けが起きてしまいます...

    お世話になります PHP4でHPを作成しています 文字化けに関して質問させて下さい PHPで作成したページの更新をすると 5回に1回の割合で文字化けが発生してしまいます EUC-JPで作成したPHPファイルを表示するので ファイルの先頭に  <? header(\"Content-Type: text/html;charset=EUC-JP\"); ?>  <html lang=\"ja\">  <head>  <meta http-equiv=\"content-type\" content=\"text/html; charset=EUC-JP\">  <meta http-equiv=\"content-style-type\" content=\"text/css\">  <meta http-equiv=\"content-script-type\" content=\"text/javascript\"> と指定してから 他の処理が実行されるようにしているのですが…。 何回か更新を繰り返すと文字化けを起こしてしまいます。 文字化けを起こした時にソースを表示すると 日本語が正しく見れる状態になっていたので シフトJISになってしまっているようで… 宜しくお願いします

    • 締切済み
    • PHP
  • 文字コード変更による、文字化け・レイアウト崩れ

    文字コードをShift-jisからEUC-JPに変更したいのですが、 HTML・CSSに処理を施したら文字・レイアウトが大幅に崩れてしまいました。 以下のように変更したのですがやり方に間違いはないでしょうか? [HTML] <meta http-equiv="Content-Type" content="text/html; charset=Shift-jis"> ↓↓ <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> [CSS] @charset "shift_jis"; ↓↓ @charset "euc-jp"; また、ブラウザの表示⇒エンコードで(Shift_jis)を選択すると今までどおり正常に表示されます。(HTMLとCSSにはeuc-jpの記述にも関わらずです) これは文字コード変更したと思い込んでしまっているのでしょうか? 解決策お願いします。 あまり知識がありませんので、分かり易く教えていただけるとありがたいです。 ちなみにエディタはHTML Project2を使用しています。

  • OSから返ってきた文字が文字化けしてしまう

    OS:Linux9 PHP Version 4.3.10です。 exec("whois -h whois.jprs.jp $host,$output); print implode($output,"<br>"); とすると文字化けしてしまいます。 まず確認したのが ファイル名:/etc/sysconfig/i18n ------------------------------ #LANG="C" LANG="ja_JP.eucJP" #SUPPORTED="C:C:C" SUPPORTED="ja_JP.eucJP:ja_JP:ja" SYSFONT="lat0-sun16" SYSFONTACM="8859-15" ------------------------------ ■スクリプトファイルの文字コード EUC-JP(エディタで確認しました) ■ブラウザで実行した場合の文字コード EUC-JP(<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">を挿入) ■$outputの文字コード print mb_detect_encoding($output[$i]); (配列全て調べましたが、UTF-8でした) ■苦肉の策 ファイルの文字コード、表示エンコードをUTF-8にしても同じく文字化けしてしまいます。 どなたか同じような経験をされた方、情報いただけないでしょうか?

    • 締切済み
    • PHP
  • 文字コードについて教えてください。

    ホームページを作成するときに指定する文字コードをどうしたらいいのか迷っています。 ウインドウズ環境でホームページを作る際、入力された文字は秀丸などの特別なソフトを使わなければ自動的にShift JISコードになると思うのですが、この場合、タグを <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> と指定するべきでしょうか?それとも、 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-2022-jp"> と指定するべきでしょうか? ISO-2022-JPで指定した場合、ブラウザが必ずしも自動判別してくれないこともあるのでしょうか? また、CGIスクリプトはShift JISで入力するとエラーを起こすことがあると聞いたことがあります。 ホームページを作成する場合には、常にISO-2022-JPかEUCの文字コードで作成するようにしたほうがいいのでしょうか? いろいろ検索して調べてみたのですが、どうもよくわかりません。宜しく御願いします。 なお、gooのホームページを閲覧するときも頻繁に文字化けしています(文字コードがEUCに指定されていないのはなぜでしょうか?)。

  • 自作cgiのページがIE10で文字化けする

    Perlでcgiのページを作っています。文字コードはEUCです。 最近、IEのバージョンを8から10にアップグレードしたのですが、 自分の作ったページが、たまに文字化けするようになりました。 IE10のエンコード設定は「自動選択」にしていますが、 自動で「西ヨーロッパ言語(ISO)」に判断されてしまいまうことがあります。 Perlのcgiの文字コードはEUCで、ソースには以下のようにEUC-JPを指定しています。 <meta http-equiv="Content-Type" content="text/html;charset=EUC-JP"> 手でIE10の文字コードをEUCに設定すれば文字化けは直るのですが、 数日経つとまた同じように文字化けで「西ヨーロッパ言語(ISO)」に自動判断されてしまいます。 metaでEUC-JPをしていればブラウザ側で自動判断してくれると思っていたのですが、違うのでしょうか? HTMLでmeta以外に文字コードを指定するところがあるのでしょうか?

    • ベストアンサー
    • Perl

専門家に質問してみよう