dポイントプレゼントキャンペーン実施中!

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になっています。

よろしくお願いします。

A 回答 (3件)

open FILE, "test.txt";


の次の行に、
binmode FILE, ':utf8';
を追加してみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

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

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

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

よろしくお願いします。

お礼日時:2008/10/19 23:57

use utf8; を指定しなければ文字化けせず出力されるでしょう。


UTF-8で保存することと,use utf8; 宣言することは違いますので。
http://okwave.jp/qa4257517.html の私の過去の回答 ANo.2
    • good
    • 0
この回答へのお礼

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

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

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

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

お礼日時:2008/10/20 22:28

>binmode FILE, ':utf8';



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

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

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

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

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

お礼日時:2008/10/20 22:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!