• 締切済み

TXTに出力すると文字化けが起こる

Ajaxで送信したデータを元にCGI(Perl)でTXTファイルを書き換えると、 どうしても文字化けしてしまいます。 内容はこんな感じです。無駄な部分は省きました ************************* #!/usr/local/bin/perl print "Content-type: text/html; charset=Shift_JIS\n\n"; use CGI; $n = $q->param("name"); $data = "$nさん、こんにちは"; open(F,"> data.txt"); flock(F,2); print F $data; flock(F,8); close(F); end; ************************* $n(フォームのデータ)は文字化けしないのですが、 「さん、こんにちは」の部分が文字化けしてしまいます。 詳しい方、ご教授願います。

  • CGI
  • 回答数2
  • ありがとう数2

みんなの回答

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.2

ANSI=Shift_JISです。 ANSI(≒ASCII)に日本語文字を追加したのがShift_JISです。 なのでWindowsのメモ帳などではANSIという名でShift_JISを保存します。 原因は他の所にありそうです。

kura07
質問者

お礼

回答ありがとうございます。 別に原因を探してみます。

  • notnot
  • ベストアンサー率47% (4849/10263)
回答No.1

スクリプトの文字コードはちゃんとSJISですか?

kura07
質問者

お礼

確認したところ、「ANSI」でした。 「Shift-JIS」で保存しようとしたところ、 「名前を付けて保存(A)...」をクリックして、文字コードを選択するところは、 「ANSI」「Unicode」「Unicode big endian」「UTF-8」しかありませんでした。 どうすればいいのでしょうか?

関連するQ&A

  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • 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種類のファイルを用意し実行したところ、下記の結果になります。 ↓-----------------------------↓ あ=&iuml;&raquo;&iquest;&atilde;ƒ†&atilde;‚&sup1;&atilde;ƒˆ&ccedil;”¨&aelig;Š•&ccedil;¨&iquest;<BR> a=テスト用投稿<BR> ↑-----------------------------↑ 文字が正常に表示されないのですが、外国語?みないなまったく読めない文字になってしまいます。 色々試してみたのですが、print="";の中に英数以外が入っていると文字化けするみたいです。 あ=テスト用投稿 a=テスト用投稿 としたいのですが、まったく解決方法がわかりません。 perlのバージョンは5.6.1です。 ファイルはすべてUTF-8で保存しています。 ブラウザもエンコードはUTF-8になっています。

    • 締切済み
    • CGI
  • 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になっています。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • perlのcgiが文字化けします。

    perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

  • htmlで呼び出したCGIの出力が文字化けする

    下記のInput.cgiというスクリプト(改行コードLF, 文字コードUTF-8) ---------------- #! /usr/bin/perl $method = $ENV{'REQUEST_METHOD'}; if ($method eq 'POST') { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } elsif ($method eq 'GET') { $buf = $ENV{'QUERY_STRING'}; } print "content-type: text/html\n\n"; print "メソッドは$methodでした。<br>\n"; print "受け取ったデータは$bufでした。\n"; ---------------- があります。これをブラウザで見ると(入力なしのまま) 「メソッドはPOSTでした。  受け取ったデータはxxxでした」 と正常に表示されます。 次に次の内容のhtml(改行はLF,文字コードはShiftJIS) ------------- <html><head> <title>FORMによるデータ転送</title></head> <body> <form method="POST" action="myInput.cgi"> <input type="text" name="text"><br> <input type=submit value="送信"> <input type=reset value="取消"> </form></body></html> -------------- をブラウザで表示させ、inputボックスに英数字(または日本語)を入力し、「送信」をクリックすると、今度はCGIスクリプト中の日本語を含めて総ての日本語出力が文字化けしてしまいます。 これが起きるのは、htmlとCGIの文字コードが異なるからでしょうか? 文字化けを止めるには何をすればよいのでしょうか? 教えて下さい。お願いいたします。

  • Perlからメール送信で文字化け

    Perl5.8からsendmailを使ってメール送信しています。 髙や﨑が入ると文字化けします。文字化けしないようにする方法を教えてください。 #!/usr/bin/perl require 'jcode.pl'; require 'mimew.pl'; $sendmail = '/usr/lib/sendmail'; print"Content-type: text/html\n\n test\n"; if (!(open(OUT,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; } print OUT "To: xxxx\@hogehoge.co.jp\n"; print OUT "From: xxxx\@hogehoge.co.jp\n"; print OUT "Reply-To: xxxx\@hogehoge.co.jp\n"; $subject = "サブジェクト 髙﨑"; $subject = &mimeencode($mail_subject); print OUT "Subject: $mail_subject\n"; print OUT "Mime-version: 1.0\n"; print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n"; print OUT "Content-Transfer-Encoding: 7bit\n\n"; $honbun = "メール本文 髙﨑"; &jcode'convert(*honbun, 'jis'); print OUT "$honbun\n"; close(OUT);

    • ベストアンサー
    • Perl
  • フォームの確認画面について

    お世話になります。 現在アンケートフォームを作成し、そのデータをtxtファイルに保存するというプログラムを作成しました。そこでフォームに入力された確認画面を表示させ、確認画面で送信ボタンを押すと、データが蓄積されるプログラムに変えたいと思ってます。 今現在はフォームはhtml cgiはperlで作成してます。 実際にどのようにすればいいかが分かりません。 フォーム(html)→確認用フォーム(cgi)→蓄積用cgiという流れでいいのでしょうか? また、確認用のフォームには戻るボタンを作りたいのですが、戻った時に、入力したデータは保持しときたいのですが。 よろしくお願いいたします。 データ蓄積用cgiプログラム #! /usr/bin/perl require './cgi-lib.pl'; $answer = 31; $ansfile = "/tesuto.txt"; &ReadParse(*in); $name = "てすと"; for($n = 1; $n <= $answer; $n++ ) { $no[$n] = $in{"no$n"}; } open (FILE,">>$ansfile"); flock (FILE,2); print (FILE "\"", $name); for($i = 1; $i <= $answer; $i++ ) { $no[$i] =~ s/\"/""/g; print FILE "\"\,\""; print FILE $no[$i]; } print FILE "\"\n"; flock(FILE,8); close(FILE); print "Content-type: text/plain\n\n"; print "<HTML><BODY>\n"; print "<META http-equiv=\"refresh\" content=\"0;URL=http://○○○.html\">\n"; print "</body></HTML>"; exit;

    • ベストアンサー
    • CGI
  • 1つのプログラム内で"html出力"の部分とそれ以外の処理部分の共存

    1つのプログラム内で"html出力"の部分とそれ以外の処理部分の共存 こんにちわ。 ・リロードイベントをキャッチしたhtmlからリクエストをcgiが受信(html出力部分) ・カウンタ値を保存しているtxtファイル(data.txt)から現在の値を読み出す ・+1してファイルにまた値を書き込む ・その値をhtmlにも返して表示させる(html出力部分) といった具合のプログラムを作りたいのですが、html出力をしている部分とそのほかの処理を同じcgiファイルに入れているとうまく動かないみたいです。 以下が問題のファイルの中身です。 (test.cgi) #!/usr/bin/perl open(IN, "../html/2010/data.txt"); my $counter=<IN>; close(IN); $counter++; open(OUT,"> ../html/2010/data.txt"); print (OUT "$counter\n"); close(OUT); print "Content-type: text/html\n"; print "\n"; read(STDIN, my $data, $ENV{'CONTENT_LENGTH'}); print "$counter\n"; ページをリロードして処理を確認するとdata.txt内の値は変わらないまま、それに1を足しただけの値が表示されます。しかしdata.txtの中身が0でサーバのコマンドラインで perl test.cgi といった風に動かしてみると Content-type: text/html 1 といった感じに今度はちゃんとdata.txt内の値もちゃんと書き換えられて出てきます。 html出力部分とdata.txtの書き換え部分は分離させたほうがよいのでしょうか?分離しなければいけない場合は互いのデータの受け渡し方法もご教授お願いします。

    • ベストアンサー
    • CGI
  • 初心者で、困っています。(文字化け)

    すみません、すごく初歩的なことで困っています。 本を見ながら、下のようなものを書いたのですが、 出力すると、文字化けをしてしまいます。ウィンドウズの環境で、Perlは5.8を使い、読み込みのテキストはUnicodeです。どのようにすれば、文字化けをしないで、読み込めるのでしょうか。 open ( IN , "LBa3_00028.txt" ) or die; open ( out , ">out.txt" ); while ( $line = <IN>){ print out "$line\n"; } close(out); close(IN);

    • ベストアンサー
    • Perl
  • CGIにおいて、エンコード・文字化けの対処方法

    以下のようにCGIを記述しております。(本日勉強したてで間違いだらけでしたら申し訳ございません。) ============= #!/usr/local/bin/perl print "Content-type: text/html; charset=EUC-JP\n"; print "\n"; print "<html>\n"; print "<title>Hello CGI</title>\n"; print "<body>\n"; print "<h1>Hello CGI!</h1>\n"; print "<hr>\n"; print qq( 上記のCGIファイルのメッセージは、次のように記述しました。<br><br> #!/usr/local/bin/perl<br><br> print "Content-type: text/html\\n";<br> print "\\n";<br> print "&lt;html&gt;\\n";<br> print "&lt;title&gt;Hello CGI&lt;/title&gt;\\n";<br> print "&lt;body&gt;\\n";<br> print "&lt;h1&gt;Hello CGI!&lt;/h1&gt;\\n";<br> print "&lt;/body&gt;";<br> print "&lt;/html&gt;";<br><br> ); print "</body>"; print "</html>"; =========== 以上をIE7で表示しますと、エンコードが西ヨーロッパ言語になって文字化けを起こしてしまいます。 何か記述の仕方が間違っているのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI