• 締切済み

ActivePerl5.8で日本語を使いたい

Wernerの回答

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

ソースはUTF-8で書きましょう。 記述の仕方はこんな感じ。 ------------------------------ use utf8; use strict; binmode STDOUT, ":encoding(cp932)"; #標準出力をcp932に binmode STDERR, ":encoding(cp932)"; #標準エラー出力をcp932に open (IN, "<:encoding(euc-jp)", "eucjp.txt"); #EUC-JPで書かれたファイルを読み込む #以下略 ------------------------------- 細かいことについては以下のページを読むと良いです。 Perl 5.8.x Unicode関連 http://www.rwds.net/kuroita/program/Perl_unicode.html Perl の概要と実行法 http://homepage2.nifty.com/ttoyoshima/Perl/Intro.htm WindowsでPerlを使うもんじゃない http://www.aritia.org/hizumi/perl/perlwin.html

aries99
質問者

補足

さっそくの回答ありがとうございます。 やってみました(休日に自宅でやるしか余裕がないもので、返事も遅れてしまいました)。 実行すると、コマンドラインが文字列を吐き出して、そのまま閉じてしまいます。エラーした風な動作に見えます。(ただし実行しているように見えます) 上記 use strictの行を#use strictにして実行すると 下記コメントが出力されました。いったん、<STDIN>で止めているのですが、エンターを押すと、やはり消えます。 Mailformed UTF-8 character (unexpected continuaion byte 0xa1,with no preceeding start byte) at [perl実行ファイル名] line66. Mailformed UTF-8 character (unexpected non-continuaion byte 0x2e,with no preceeding start byte) at [perl実行ファイル名] line66. Mailformed UTF-8 character (unexpected continuaion byte 0xa1,with no preceeding start byte) at [perl実行ファイル名] line66. Mailformed UTF-8 character (unexpected non-continuaion byte 0x29,with no preceeding start byte) at [perl実行ファイル名] line66. 66行目は if ($mytitle =~/(【.*?】)/){ と書かれています。ここが、日本語文字を使う唯一の個所です。 繰り返しですが、エラーメッセージの文字は以下の4つ 0xa1 0x2e 0xa1 0x29 0x2eは「.」0x29は「)」まではわかったのですが…。 何が問題なのでしょうか。よろしくお願いします。

関連するQ&A

  • ActivePerl 5.8.4 の日本語表示について

    ActivePerl 5.8.4 を使っています。 5.8 以降は、   use encoding 'shiftjis'; と書くと日本語も正しく処理してくれるということを聞いていたのですが、以下のプログラム   use encoding 'shiftjis';   print "日本語文字列\n";   print STDERR "日本語文字列\n"; を実行すると、   日本語文字列   Wide character in print at p line 3.   譌・譛ャ隱樊枚蟄怜 となってしまいます。つまり、標準出力では問題ないが、標準エラー出力には対応できていないということになります。 これは、現在避けられない不具合なのでしょうか? 解決方法をご存知の方、よろしくお願いします。

    • ベストアンサー
    • Perl
  • use encoding を使う

    フリーソフトの掲示板ソフト(shift_jis)で encoding を使おうと下記の2行を追加したところ、Internal Server Error になってしまいます。どこに追加しても同じです。 どんな原因が考えられるでしょうか。 use encoding "shiftjis"; binmode STDERR, ":encoding(shiftjis)";

    • ベストアンサー
    • Perl
  • perl5.8.6日本語の置換について

    教えてください。perl5.8.6の日本語処理で行き詰まっています。 下記のプログラムをeuc-jpで書いて動作させたところ、s///gの 置換がうまくいきません。 何か間違っているのでしょうか。 weather.pl --------------------------- #! /usr/bin/perl # 使い方: # require "weather.pl"; # $data=weather; use LWP::Simple; use strict; use encoding 'euc-jp'; use Encode qw/from_to/; binmode STDERR,"encoding(euc-jp)"; sub weather{ my $doc; my $adrs = "http://www.jma.go.jp/JMA_HP/jp/warn/text/27.html"; until($doc){ $doc = get "$adrs"; } from_to($doc,'shiftjis','euc-jp'); $doc =~/<tr><td><pre>(.+)<\/pre><\/td><\/tr>/s; $doc = $1; $doc =~s/」/ /g; $doc =~s/パーセント/%/g; $doc =~s/[0-9]/[0-9]/g; $doc; } 1; my $result=weather; print "$result\n"; ---------------------------

    • ベストアンサー
    • Perl
  • EUC_JPにない文字のshiftJISからの変換処理

    http://okwave.jp/qa757480.html ここにある質問と同じ状況になっています。 shiftJISの文字列をEUC_JPに変換したところ、 invalid byte sequence for encoding "EUC_JP" というエラーが出ました。 EUCにない文字なので変換が出来ないのはわかるのですが、ではその場合どのような処理が妥当でしょうか。 テキストデータから文字を取り込んでいるので最初から文字をEUC_JPやUTF-8で文字列を作ることができません。 EUCにない文字はどうやっても変換できないので代替文字もしくは記号を置くことで解決しようかと思ったのですが、そうするとどの文字がshiftJISにあってEUCにないかの一覧がないとどうしようもないかと思います。 この場合はどうするのが良いかアドバイスいただけませんでしょうか。

    • ベストアンサー
    • Perl
  • javaで日本語が文字化けしてしまいます。eclipseからjavaク

    javaで日本語が文字化けしてしまいます。eclipseからjavaクラスを実行する場合、どのようなencodingの式を記述すればいいでしょうか? コマンドプロンプトでjavac -encoding SJIS クラス名.javaと入力すれば日本語の文字化けを解決できますがeclipseからの実行で日本語文字化けを避けられません。 コードを記述するのだと思いますが、どのように記述すればいいのでしょうか? eclipseの設定で文字コードを変更できるみたいですが、SJISには変更できませんでした。 何か解決策はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • urlencodeしていない日本語をPATH_INFOで

    お世話になっております。 Wikipedia等のようにアクセスする際にURLに直接書いた日本語を PATH_INFOで受け取って処理をしたいのですが、うまくいきません。 試しに、 echo $_SERVER['PATH_INFO']; echo mb_convert_encoding($_SERVER['PATH_INFO'],"utf-8","sjis"); echo urldecode(mb_convert_encoding(urlencode($_SERVER['PATH_INFO']),"utf-8","sjis")); とした、BOM付UTF-8のPHPファイルに、 http://~/test.php/日本語 で[日本語]を色々変えてアクセスすると、 一行目と三行目は同じ結果になり、二行目だけ異なった結果となります。 一・三行目が上手く表示された時は二行目が文字化けしており、 一・三行目が文字化けした時は二行目が正常に表示されています。 (全てが文字化けすることもあります) どのようにすれば文字化けが起こらず、うまく受け取れるのかが分かりません。 本当はUTF-8ではなく、EUC-JPで行いたいのですが EUCはほとんどの場合、文字化けしてしまいます。 どのようにすれば良いのでしょうか。ご教授を宜しくお願い致します。 なお、php.iniは変更できません。

    • ベストアンサー
    • PHP
  • Data::Dumper;でダンプ後表示した文字列\x{30fc}...

    お世話になります。 下記のスクリプトを使ってrssファイル内をuse Data::Dumper;でダンプして表示してみたのですが、rssファイルがutf8で記述されているせいか 表示時に日本語の所が\x{30fc}のような文字列になってしまいます。 これをshiftjisで表示させたいのですが、試行錯誤してもうまくいきません。 どなたかご教授いただけませんでしょうか。 #!/usr/bin/perl BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } use XML::RSS; use Data::Dumper; my $rss = new XML::RSS; #表示形式の違いで1と2がある。 $Data::Dumper::Indent = 1; use open IN => ":utf8"; # 入力をUTF8とする use open OUT => ":shiftjis"; #use open ":std"; #use Encode; #use encoding 'shiftjis', STDIN=>'utf8', STDOUT=>'sjis'; #binmode STDOUT, ":encoding(utf-8)"; #binmode STDOUT, ":encoding(shiftjis)"; #binmode STDOUT, ":encoding(euc-jp)"; #use open ":encoding(shiftjis)"; # rssをセット。 open my $fh, '< ./test.rss'; my $text = join undef, <$fh>; close $fh; # rssをパース $rss->parse($text); # ひとまず中見を知る為にダンプしてみる print "Content-type:text/html;charset=Shift_JIS\n\n"; print "<html><head>\n"; print "<title></title></head>\n"; print "<body>\n"; print Data::Dumper->Dump([$rss]);

    • ベストアンサー
    • Perl
  • index関数で日本語を使用する場合の問題(追加質問)

    7つ下で「index関数で日本語を使用する場合の問題」の質問をしましたが、 追加で質問させてください。 前回は use encoding "shiftjis"; を使用することで解決しました。 DOS窓のコマンドラインではこれで良かったのですが、 これをcgiにしてブラウザから表示させると文字化けします。 3行目の&ReadParseを外せば文字化けしないのですが、 &ReadParseを使用し、かつ、文字化けしない方法がありましたら ご教授いただけませんでしょうか。 =================================================== #!/usr/bin/perl require 'cgi-lib.pl'; &ReadParse(*in); use encoding "shiftjis"; $data = '東秀'; $key = '件'; $result = index($data,$key); print "Content-type: text/html\n\n"; print <<EOF; <html> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> テストです。<br> result = $result<br> </html> EOF =================================================== よろしくお願いします。

    • ベストアンサー
    • Perl
  • HTTP::Request::Common qw(POST);時にソフト表だとエラーになる

    お世話になります。 HTTP::Request::Common qw(POST);を使ってPOSTする際、aaa=> 'あいう',などの日本語はPOST後、データが渡っている事が確認できるのですが、'ソフト表'等の文字列をあえて送ろうとすると、エラーになってしまいます。 記述はShift_JISで行っています。 先生方、ご教授ねがえませんでしょうか。 #!/usr/bin/perl BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } use HTTP::Request::Common qw(POST); use LWP::UserAgent; #use open IN => ":utf8"; # 入力をUTF8とする #use open OUT => ":shiftjis"; #use open ":std"; #use Encode; use encoding 'shiftjis', STDIN=>'utf8', STDOUT=>'shiftjis'; #binmode STDOUT, ":encoding(utf-8)"; #binmode STDOUT, ":encoding(shiftjis)"; #use open ":encoding(shiftjis)"; #require './jcode.pl'; my $ua = LWP::UserAgent->new; #タイムアウトを設定 $ua->timeout(10); my $req1 = POST 'http://domain.com/test.cgi', [ aaa => 'www1', bbb => "ソフト表" ,#bbb=> 'あいう',だとエラーになりません ]; print $ua->request($req1)->as_string;

    • ベストアンサー
    • Perl
  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP