こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CGIでprint出力時に文字化けします・・・

test.cgi (UTF-8)---------------------
#!/usr/bin/perl
use utf8;
print "Content-type: text/html;charset=utf-8\n\n";
open FILE, "test.txt";
while (<FILE>){
$read_list[$i]=$_;
$i++;
}
print "あ=$read_list[0]<BR>\n";
print "a=$read_list[0]<BR>\n";
exit;
-------------------------------

test.txt (UTF-8)--------------
テスト用投稿
-------------------------------

上記の2種類のファイルを用意し実行したところ、下記の結果になります。
↓-----------------------------↓
あ=i≫?a□□a□1a□□c□¨ф□□c¨?<BR>
a=テスト用投稿<BR>
↑-----------------------------↑
文字が正常に表示されないのですが、外国語?みないなまったく読めない文字になってしまいます。(コピペだと表示されないみたいなので、似たような感じで作りました。)

色々試してみたのですが、print="";の中に英数以外が入っていると文字化けするみたいです。
あ=テスト用投稿
a=テスト用投稿
としたいのですが、まったく解決方法がわかりません。
perlのバージョンは5.6.1です。
ファイルはすべてUTF-8で保存しています。
ブラウザもエンコードはUTF-8になっています。

よろしくお願いします。

投稿日時 - 2008-10-19 13:46:26

QNo.4413021

すぐに回答ほしいです

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

open FILE, "test.txt";
の次の行に、
binmode FILE, ':utf8';
を追加してみてはいかがでしょう。

投稿日時 - 2008-10-19 22:09:15

お礼

ご回答ありがとうございます。

上記の内容で実際やってみたのですが、エラーがでました。

内容は Unknown discipline ':utf8'
binmodeで検索し、色々と試してみましたが、うまくいきませんでした。

よろしくお願いします。

投稿日時 - 2008-10-19 23:57:42

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

use utf8; を指定しなければ文字化けせず出力されるでしょう。
UTF-8で保存することと,use utf8; 宣言することは違いますので。
http://okwave.jp/qa4257517.html の私の過去の回答 ANo.2

投稿日時 - 2008-10-20 13:13:46

お礼

ご回答ありがとうございます。

use utf8;
を削除して実行したところ文字化けはなくなりました。

ただ、こちらには表記していないのですが、比較などでまったくマッチングしないみたいですね。

大変参考になりました。ありがとうございました。

投稿日時 - 2008-10-20 22:28:03

ANo.2

>binmode FILE, ':utf8';

> perlのバージョンは5.6.1です。

binmode が第二引数をとるようになったのは5.8以降ですから
質問者さんのこのバージョンではつかえません。

投稿日時 - 2008-10-20 03:06:53

お礼

ご回答ありがとうございます。
Ver5.8を入れて試したところ正常に表示させることができました。

ただprintのところでエラー(Wide character in print...)が出るみたいなので、3行目に
binmode STDOUT, ":utf8";
を追加することで正常に表示されました。

ありがとうございました。

投稿日時 - 2008-10-20 22:20:08

あなたにオススメの質問