Perlで、 UTF-8 → ISO-2022-JP へ文字化けしないで変換する方法を探しています。(メール送信に使用します)


今は
use Encode qw(from_to);
from_to($self->{subject},"utf8",'MIME-Header-ISO_2022_JP');
from_to($self->{message},"utf8","iso-2022-jp");
で行っているのですが、どうしても「①」や「~」が文字化けしてしまいます。

(質問に不備がありましたらコメントへお願いします)

回答の条件
  • 1人3回まで
  • 登録:2007/03/21 21:33:53
  • 終了:2007/03/21 23:28:54

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/03/21 22:48:01

ポイント55pt

iso-2022-jp には本来①といった機種依存文字は含まれません。使わえない・使わないのが本来の形だと思います。

ISO-2022-JP - Wikipedia


一応 Encode.pm には iso-2022-jp-1 といった文字コードも定義されているようですので、そちらを試してみてはどうでしょうか。

Encode::JP - Japanese Encodings - search.cpan.org


あと、~についてはもうちょっとややこしいです。

UTF-8 に変換する前は Shift_JIS だったりしませんか?

id:fed

iso-2022-jp-1にしてみましたが、だめでした・・・。

うーん、すべてUTF-8です。

①などは諦めれるとしても、~はなんとか乗り越えたいですね…

2007/03/21 23:07:27
id:Bookmarker No.2

しおり回答回数191ベストアンサー獲得回数342007/03/21 22:48:31

ポイント15pt

「①」はISO-2022-JPで使える文字集合には無い文字なので、仕方がないのでは?

ISO-2022-JP - Wikipedia

id:fed

準拠していなくてもいいので、Eメールで表示されるようにしたいのです。


【追記】

ISO-2022-JP-MSを用いることで、解決しました。ありがとうございました。

2007/03/21 23:28:10
  • id:b-wind
    いっそメール本文は UTF-8 か Shift_JIS で送ってしまった方がすっきりすると思いますが。
    今時のクライアントなら大抵対応してますし。
  • id:pmakino
    ①はそもそも ISO-2022-JP の文字集合に含まれていない Microsoft 独自拡張なので、化けてしまうのは仕方ないし、送るべきではないのですが、規格外でも無理矢理、ということでしたら、以下の2つの方法があるかと思います。

    ■1 <a href="http://search.cpan.org/dist/Encode-EUCJPMS/">Encode-EUCJPMS</a> で定義されている cp50220 エンコーディングを使う
    use Encode qw(from_to);
    use Encode::EUCJPMS;
    from_to($self->{message}, 'utf8', 'cp50220');

    ■2 いったん cp932 に変換してから jcode.pl でなんちゃって JIS に変換する
    use Encode;
    require 'jcode.pl';
    from_to($self->{message}, 'utf8', 'cp932');
    jcode::convert(\$self->{message}, 'jis', 'sjis');

    また、b-wind さんもコメントされているように、ISO-2022-JP に含まれない文字を送りたいなら、いっそ UTF-8 や Shift_JIS (というか cp932) で送ってしまう方が良いかもしれません。
  • id:b-wind
    純粋な疑問としてえせISO-2022-JPに対応しているクライアントと UTF-8 and/or Shift_JIS(CP932) に対応しているクライアントに違いはあるのだろうか?
  • id:fed
    私もUTF-8で送ろうと思っていたのですが、
    検索している間に
    「UTF-8にしたらユーザーから文字化けするという
     苦情がきた」
    というコメントを見ました。

    ですので、ISO-2022-JPで(一応)送信しようと思いました。

    全体のユーザーとして、UTF-8に対応している人の割合は
    どの程度なんでしょうね・・・?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません