• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UTF-8 -> CP1251にエンコードするには?)

UTF-8からCP1251へのエンコード方法は?

このQ&Aのポイント
  • Perlの勉強しながらTeraPadを使って簡単なCGIをつくっている初心者です。UTF-8で書かれたメールをCP1251形式のメールとして送信したいのですが、エンコード方法が分かりません。
  • キリル語を含むCP1251形式のメールを送信するためには、適切な変換モジュールが必要ですが、見つけることができませんでした。
  • お困りの状況ですが、誰か詳しい方に助けていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

Perl5.8以降なら、 ファイルopen時に文字コードを指定するか、 標準モジュールのEncodeを使ってみてはどうでしょう。 ------------------------------------------------------------ use strict; use utf8; use Encode; #キリル文字をUTF-8で書く my $str="Фд\n"; #UTF-8でファイル出力 open (OUT, ">:utf8", "utf8.txt")|| die ; print OUT $str; close(OUT); #cp1251でファイル出力 open (OUT, ">:encoding(cp1251)", "cp1251.txt")|| die ; print OUT $str; close(OUT); #標準出力(shift-jis指定) binmode STDOUT, ":encoding(shift-jis)"; print $str; #出力前にutf8からcp1251へエンコードして、そのままファイル出力 my $cp1251_str = Encode::encode("cp1251",$str); open (OUT, ">:bytes", "bytes.txt")|| die ; print OUT $cp1251_str; close(OUT);

参考URL:
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
Ulia
質問者

お礼

ありがとうございます!上記のように指定してみたら上手くいきました!文字化けもなく上手く変換されているようです(~_~)また少し関係なくなってしまうかもしれませんが、sendmailは普通に使うと受信拒否もしくは迷惑メール扱いになってしまうのでしょうか?-tと-oiを使っていますが、いくつかのメールでは受信も受け付けてくれないようです・・・。検索サイトでいくつか調べてみたのですが、pop3(かsmtp)モジュール?を使えばいいのでしょうか?今は open(MAIL, "| $SEND_MAIL -t -oi $TO_MAIL"); と書いてます。それ以外は受信サーバー側ではじかれてしまうみたいです。皆さんはどうやって解決してるのでしょうか? Wernerさん、アドバイス有難うございました。すごく助かりました!