電子書籍の厳選無料作品が豊富!

携帯メールをCGIで受け取って処理するスクリプトを書いているのですが

文字コードの処理について行き詰っています。



$str = " $B$F$9$H (B"; #jisコードで"てすと"



として、この文字列をjcode.pmでシフトjisに変換したいのですが



$body = Jcode::convert($str, 'sjis');



このようにしても$bodyの中身は" $B$F$9$H (B"のまま変わりません。



MIME::parserでうけとったjisコードの文字列はちゃんと変換されるのでjcode.pmに問題はないと思われますが、

文字列操作をして変数に入れるとMIME::parserで受け取った場合とおなじ内容でもデコードされないとゆう結果になります。



なにか根本的に違うのでしょうか…


スペースを省いてみたり

$body = Jcode::convert($str, 'sjis','jis');

としてみたりしたのですが
まったくダメでした。



ちょっとしたアドバイスだけでもいいのでよろしくお願いします。



あとお金がかかってもよいので、そういった問題を解決できそうなサイトなどがあれば紹介していただければと思います。



よろしくお願いします。m(__)m

A 回答 (1件)

> スペースを省いてみたり



って、どこのことです?

> $str = " $B$F$9$H (B"; #jisコードで"てすと"

の $Bの前と(Bの前でしょうか?
だとしたら、スペースなのが間違いです。
本来入るべきなのは ESC (ASCIIコード 0x1B)です。
制御文字なので、エディタや端末、フォント等の関係で、表示されなかったり、空白表示されたり、□や別の文字になったりすることがあります。

$str = "\e$B$F$9$H\e(B"; # \eはESCを表すエスケープシーケンス
$str = "\033$B$F$9$H\033(B"; # \0XXで8進でコード指定
$str = "\x1b$B$F$9$H\x1b(B"; # \xXXで16進でコード指定



余談になりますが、今回は大丈夫なようですが、ダブルクォートの中に$を書くと以降が変数名だと解釈されるケースがあります。
    • good
    • 0
この回答へのお礼

ありがとうございます!!!!!!!
できました!!!!!

なんでスペースがあるんだろうと思ってましたが、スペースじゃなかったんですね!

なんとお礼をしたらよいのか…


本当に本当に
本当にありがとうございますm(__)m

お礼日時:2011/05/01 20:20

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