アプリ版:「スタンプのみでお礼する」機能のリリースについて

perl初心者です。

下記のようなファイルがあったとします。
パナソニック(ナショナル)
三菱電機
日立
東芝
SONY

下記のように、書きました

while (<IN>) {
use Jcode;
Jcode::convert($_, 'euc');
chomp;
$line+=1;
Jcode::convert($_, 'euc');
if ($_=~ /\x8E/) {
print "行=$line $_\n";
}
}

できあがったファイルは、下記のように、半角カナではなく、字化け状態になってしまいました。
行=2 姉鰭電機
行=4 東芝

よろしくお願い致します。

A 回答 (4件)

EUC にコンバートできてないです。


データはファイルから読み込んでいますか。
スクリプトの中でSJISで配列を作って、それを読み取ってその文字列をEUCにコンバートするのはうまくいかないようです。
※ use Jcode; はループの外にした方が良いのでは(実害は無いけど)
※ 何で Jcode::convert($_, 'euc'); を2回やってるのかな?

【HINT】
次のSJISコードの文字列を%エンコードすると右のようになります。
三菱電機 → %8E%4F%95%48%93%64%8B%40
姉鰭電機 → %8E%6F%95%68%93%64%8B%40
東芝 → %93%8C%8E%C5
「三菱電機」が「姉鰭電機」になる原因は次のエンコード間違い。
%4F → アルファベット O
%6F → アルファベット o
%48 → アルファベット H
%68 → アルファベット h
    • good
    • 0

 メモ帳やワードパッドなどの文字コードは「shift_jis」になっているので、Jcode::convert($_, 'euc'); でeucで出力すると文字化けするのではないでしょうか。


 Jcode::convert($_, 'shift_jis'); ではどうでしょうか。
 
    • good
    • 0

>if文なしで、printすると、


とありますが、これは質問にあるスクリプト同様 Jcode::convertは
実行しているのでしょうか?

もしそうだったとして、ただ単に入力をそのまま出力しても同様の
文字化けが発生しますか?

あとは、Jcode::convert で入力文字コードの指定をしてみるとか。

この回答への補足

ご回答、有難うございます。
申し訳ございません、文字化けは、有りませんでした。
ただ、半角カナを抽出する為に、if ($_=~ /\x8E/) の条件で、printしたのですが、出力されたのが、下記の2行になってしまいました。

行=2 三菱電機
行=4 東芝


while (<IN>) {
use Jcode;
chop;
$line+=1;
Jcode::convert(\$_, 'euc', 'sjis');
Jcode::convert(\$_, 'sjis', 'euc');
if ($_=~ /\x8E/) {
print "行=$line $_\n";
}
}

よろしくお願い致します。

補足日時:2009/04/27 17:31
    • good
    • 0

出力しようとしているhtmlのcharsetが、またはそのcgi自体の漢字コードがshift_jisになっていませんか。

この回答への補足

ご回答、ありがとうございます。
普通の、メモ帳などで、作成したテキストファイルなのですか。
何か、操作をしないといけないのでしょうか?

if文なしで、printすると、下記のように、やはり三菱電機が文字化けしています。
行=1 パナソニック(ナショナル)
行=2 姉鰭電機
行=3 日立
行=4 東芝
行=5 sony
行=6 その他

よろしくお願い致します。

補足日時:2009/04/24 12:17
    • good
    • 0

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