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

日本語処理、ActivePerlでは無理なのでしょうか?

下記test.plを実行すると、
========================================================
"\x{00e3}" does not map to shiftjis at test.pl line 10.
...
u is \x{00e3}\x{0082}\x ...
"\x{0082}" does not map to shiftjis at test.pl line 11.
...
s is \x{0082}\x{00e6}\x{0081}[\x{0082}±
me is 倉田真由美
=========================================================
となって、倉田真由美しか期待通りに出力されません。
外部ファイルの"よーこ"を正しく扱う方法はないのでしょうか?


test.pl (utf-8)
--------------------------------------------
use utf8;
binmode STDOUT => ":encoding(shiftjis)";
binmode STDERR => ":encoding(shiftjis)";

require 'u.pl'; # utf-8 の外部スクリプト
require 's.pl'; # sjisの外部スクリプト

$me = "倉田真由美";

print "u is $u\n";
print "s is $s\n";
print "me is $me\n";
-------------------------------------------


u.pl (utf-8)
-------------------------------------------
$u = "よーこ";
-------------------------------------------


s.pl (sjis)
-------------------------------------------
$s = "よーこ";
-------------------------------------------

ActivePerl 5.8.0.806
Windows2000 (cmd.exe)


よろしくお願い申し上げます。

A 回答 (2件)

ウチで使っているのは


ActivePerl v5.8.4
build 810

環境は
XPProです
#1の答えの様にして、期待通り動きました。

最新バージョンに変えてみてはどうでしょうか
    • good
    • 0
この回答へのお礼

完璧です!
5.8.6にバージョンアップしたら、みごと解決できました!
ありがとうございます!!

同一人に20pt+10ptはできないみたいで20だけさせていただきました。

お礼日時:2004/12/22 13:05

読み込みするスクリプトファイルの方で、エンコードを記入しておく。



u.pl (utf-8)
-------------------------------------------
use encoding utf8;
$u = "よーこ";
-------------------------------------------

s.pl (sjis)
-------------------------------------------
use encoding sjis;
$s = "よーこ";
-------------------------------------------
    • good
    • 0
この回答へのお礼

ありがとうございます。
でも解決できませんね。
use utf8;
use shiftjis;
等も試しましたが、シフトJISの方だけdoes not mapが吐かれなくなりました。

しかし、出力は
s is \x{00a6}\x{005b}\x{00b1}

s is よーこ
u is よーこ
と出したいのです。

こちらの環境が悪いのでしょうか?

かなり基本的なことだと思うのですが、方々調べても解決策はありませんでした(2日も使ってしまいました)。
「Perlには無理」とエキスパートの方からはっきり言って頂けるとあきらめもつくのですが。

お礼日時:2004/12/22 11:00

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