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

海外製のプログラムを日本語対応に修正しているのですが「~」が文字化け(?)になります。

下記がコードの一部を抜粋したものです。

$message=jcode($message)->sjis;
my $msg = MIME::Lite->new(
Type =>'multipart/mixed',
From =>$fromaddr,
To =>"$to",
Subject =>"$subject",
Type => "text/plain; charset=\"iso-2022-jp\"",
Data =>"$message"
);

「~」だけが文字化けします。

下記のように文字コードを UTF-8 にすると文字化けしませんが、
メールで UTF-8 を使うのは良くないのでしょうか。

$message=jcode($message)->utf8;
my $msg = MIME::Lite->new(
Type =>'multipart/mixed',
From =>$fromaddr,
To =>"$to",
Subject =>"$subject",
Type => "text/plain; charset=\"utf-8\"",
Data =>"$message"
);

これだと文字化けしません。
UFT-8 でメールを送信しても問題ないのか、
また、問題の有無に関係なく iso-2022-jp で文字化けしない方法を
ご教授いただけないでしょうか。

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

A 回答 (5件)

波ダッシュ問題という有名な問題なのでこの言葉で検索すれば詳細が得られると思います。



解決方法は色々あると思いますが、以下のように全角チルダを波ダッシュに強制変換するとか。

Perlで日本語(ISO-2022-JP)メールを送信(まとめ)
http://d.hatena.ne.jp/kopug/20060903
    • good
    • 0
この回答へのお礼

ありがとうございます。

有名な問題だったのですね。
大変勉強になりました。

また、紹介していただいたサイトで解決することが出来ました。

お礼日時:2011/08/11 14:58

たぶん Lite.pm は関係ないよね.



「~」を Unicode のどれに割り付けるかという問題でしょう... あれ? iso-2022-jp で送るのに sjis でいいんだっけ?

参考URL:http://ja.wikipedia.org/wiki/Unicode
    • good
    • 0

波ダッシュが、チルダに変換されてしまった……


先ほど書いた、波ダッシュの件に関しては、ここを参照してください。

http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80% …
    • good
    • 0
この回答へのお礼

ありがとうございます。

波ダッシュと読むのですね。
大変参考になりました。

お礼日時:2011/08/11 14:47

ちょっと意味は変わりますが、同じようなのに



があります。
これでしたら、全機種共通だったと思います。
ですが、Windowsから出すのは大変だったと思います。
IMEパッドでは出せるのですが……

jisでも、sjisでも対応してないということですね<~が?になる


あと、受信する相手にもよるのですが、
基本的にUFT-8でメール送信しても大丈夫です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変参考になりました。

> 基本的にUFT-8でメール送信しても大丈夫です。

安心しました。
「ISO-2022-JPは7ビットで表現されているため、欧米などで開発された8ビット目を無視する電子メールシステムでも問題なく使用することができる。」
という記事を見たので少し心配していました。

お礼日時:2011/08/11 14:55

~は、機種依存文字なので、文字化けしやすい文字です。



まぁ、それは置いておいて、
utf-8で文字化けしなくて、
iso-2022-jpで文字化けする理由ですが、

$message=jcode($message)->sjis;
ここを、sjisにしているからではないですか?
いちど、jisにしてみてはどうでしょう?
    • good
    • 0
この回答へのお礼

早速ご教授いただきありがとうござます。

> ~は、機種依存文字なので、文字化けしやすい文字です。

「~」は機種依存文字なのですね。知りませんでした。
機種依存文字ではない文字で「~」と同じ意味を表現出来る文字というのはあるのでしょうか。

> いちど、jisにしてみてはどうでしょう?

私も初めは
$message=jcode($message)->jis;
にしていたのですが、そうすると
「?」ではなく、「\x{ff5e}」に文字化けしてしまいます。

お礼日時:2011/08/11 10:46

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