• 締切済み

半角文字を含むテキストの整形について

TheBlackArtistの回答

回答No.3

まだできてないのかな? e101treさんの方法が使えるのならそれが一番良いと思います。 use encodingが使えない場合は私の書いた方法が手っ取り早いです。 しかし、jcode.plはUTF-8に対応していないようなの、Jcode.pmを使うか、或いはjcode.plでeucを使うようにすればできると思います。

関連するQ&A

  • テキストファイルのHTMLタグを文字として表示させるには?

    テキストファイルのHTMLタグを文字として表示させるにはどうすればよいのでしょうか? <HTML>の"<"をJIS文字コードに置き換えれば良いというようなことを聞きましたが、 $_ =~ tr/</&lt);/s; この文字を置き換える式では駄目でした。 多分表記の仕方が間違っていると思うので正しいのをよろしくお願いします。 (上の置き換え文だと&HTML>になってしまいます。) #!/usr/bin/perl main:{ require "jcode.pl"; $file = 'file01.txt'; print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "<TITLE>表\示</TITLE>\n"; open( FH, $file) or die "Can't open"; foreach( <FH> ){ $_ =~ tr/</&lt);/s; print $_ ."<br>"; } close(FH); print "<br>_<br><"; print "</BODY></HTML>\n"; }

    • ベストアンサー
    • Perl
  • 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 (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

  • "Content-type:text/html;charset=shift_JIS\n\n" がテキスト表示されてしまう。

    CGIで print "Content-type:text/html;charset=shift_JIS\n\n"; を出力すると その文字列がそのままブラウザにテキスト表示され、その後ろの操作、 例えば、 print "Status: 301 Move Permanent\n"; print "Location: http://localhost/file/data-1.lzh\n\n"; も、単純に文字列として表示されてしまいます。 ところが、print "Content-type:text/html;charset=shift_JIS\n\n"; の行を削除すると、 もともとの目的の動作(上記の例ではファイルのダウンロード画面ポップアップ)になります。 このように、print "Content-type:text/html;charset=shift_JIS\n\n";を書かなくて済む (あるいは書かない方が良い場合)というのは、なぜでしょうか。 サーバによっては動作が変わるのでしょうか。 ※そのCGI内で、print "Content-type:text/html;charset=shift_JIS\n\n"; を2行書いてあるというようなことはありません。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 置換した文字列を変数に代入する方法

    お世話になります。 たとえば、 #!C:\Perl\bin\perl print $form->header("text/html");  : open(IN,"<file.txt"); while(<IN>){ : : s/あい(.*?)うえお/$1/; (????)←「$1」の内容を変数に代入したい : : } close(IN); というように、テキストファイルの文章中の 「あい(.*?)うえお」から(.*?)を取り出して、 その取り出した(.*?)を変数に代入したいのですが、 いろいろ試してやっているのですが、難儀して おります。どのように書いたらいいか教えてください。よろしくお願いします。 最終的にclose(IN);のあとで、print 変数;として(.*?)の文字列を表示させたいです。

    • ベストアンサー
    • Perl
  • Perlで変数中のエスケープされた特殊文字を展開

    Perlで、変数に既に格納されているエスケープされた特殊文字を、もとの文字に展開するには どのようにしたらよいでしょうか。 つまり、\t という値で格納されているのをタブ文字にしたり、\\ という値であれば\の一文字に するという事です。 ダブルクォートで定義すれば展開されると思いましたが、展開は変数の代入時に行われるだけで、 既に変数中にエスケープされて入っているものはダブルクォートを使い変数を囲んだりしても展開されません。 下記は簡単な例でやろうとしてる事を示したものです。 add変数に\tというタブを意味するエスケープされた特殊文字を含んでいるとして、その\tを タブとして展開し、abc defのようにさせたいのですが、abc\tdefと入ってしまいます。 $ cat unescape.pl #!/bin/perl $add = '\tdef'; #シングルクォートで代入すると、もちろんエスケープされたまま代入される #$add = "\tdef"; #ダブルクォートで代入すると代入時にタブへ展開される #$add = $ARGV[0]; #本当はAGRVからエスケープ特殊文字を含んだ文字列を取りたい。ARGVから代入すると、シングルクォートの時のようにそのまま代入される $tgt = 'abc'; print "add: " . $add , "\n"; print "before: " . $tgt . "\n"; $tgt .= "$add"; #既にエスケープされた形で代入されているものを、ダブルクォートで囲んで使っても展開されない print "after: " . $tgt . "\n"; $ perl unescape.pl add: \tdef before: abc after: abc\tdef

    • ベストアンサー
    • Perl
  • 変数表示について

    #! /usr/bin/perl $a='$b$c'; $b='abc'; $c='-def'; print "$a\n"; このようなプログラムで 結果が abc-def という結果にしたいと思い上記のようなプログラムを 作りましたが 結果として表示されたのは $b$c というものでした。 「abc-def」という結果を表示するようにするのは 無理でしょうか? やはり正規表現で文字列を置換してやる必要があるのでしょうか?

    • ベストアンサー
    • Perl
  • TABを表示させる方法

    以前のテキストファイルのhtmlタグ<>を文字として表示されるに続いての質問ですが、 #!/usr/bin/perl main:{ $file = 'use1.txt'; print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "<TITLE>表\示</TITLE>\n"; open( FH, $file) or die "Can't open"; foreach( <FH> ){ $_ =~ s/</</g; $_ =~ s/>/>/g; print $_ ."<br>"; } close(FH); print "</BODY></HTML>\n"; } 表示するのにTABが抜けて、全て左詰めという感じになります。 TABを表示させるにはどうしたら宜しいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字の探索について

    文字列中の英大文字,英小文字の出現回数をカウントし、その回数を出力するプログラムを作りたいのですが、どうもうまく動いてくれません。 ABC123Abcのときの出力結果は 'A' = 2 'B' = 1 'C' = 1 'D' = 0 'E' = 0 中略 'X' = 0 'Y' = 0 'Z' = 0 'a' = 0 'b' = 1 'c' = 1 中略 'y' = 0 'z' = 0 のように出したいです。 私が考えた方法では まず文字列を配列str[100]に読み込み for文で、'\0'が来るまで配列の中身の文字を一つずつ判定('A'が見つかると、変数Aの値をを1つ増やす)していき、 全ての文字の判定後、 printf("'A' = %d\n", A); printf("'B' = %d\n", B); 中略 printf("'z' = %d\n", z); という風に表示しようとしたのですが、うまく表示されず、プログラム自体もとても長くなってしまい、これが正解とはいえない状態です。 こんな方法よりもっといい方法があれば教えていただきたいです。 あと、判定方法もお願いします・・・。

  • 文字列をそれぞれテキストに表示する方法(初心者)

    質問:アスキーコードへの変換について VB6(初心者) で質問したものです。 回答してくださったかたありがとうございました。 また質問します、どうかよろしくおねがいします。 文字列を文字ごとに分けてそれぞれテキストやラベルに表示したいのですがどのようなプログラムになるのでしょうか? 例 mojiretu=ABC があるとしてAはtext1にBはtext2にCはtext3にそれぞれ 格納します。 text1.text=A text2.text=B text3.text=C mojiretuは変数文字列とします。 A、B、Cは変数ではなく普通の文字です。 テキストひとつに文字を全部いれるには mojiretu = ABC text1.text = mojiretu でいいと思うのですが、上の例がよくわかりません。 このことが書いてあるサイトでもいいのでどうか教えてくださいおねがいします。

  • 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