こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

UTF-8 -> CP1251にエンコードするには?

Perlの勉強しながらTeraPadを使って簡単なCGIをつくっている初心者です。
メインはUTF-8(多言語混在なので)で書いていて、sendmailを使ってCP1251形式(メールは全文キリル語)のメール送信したいのですが、エンコードはどのようにすればいいのでしょうか?タイトルも本文も文字化けしてしまって全く読めません(;_;) 日本語ならjcode.pl等を使って &jcode'convert(*title, "jis") のようにすればいいのでしょうがキリル語(CP1251かKOI8=R)の変換モジュールを探しても全く見つかりませんし、糸口さえ分かりません。どなたか詳しい方助けてください!ホントに困っています(T_T よろしくお願いいたします。

投稿日時 - 2006-11-20 03:54:10

QNo.2550499

困ってます

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

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

投稿日時 - 2006-11-20 04:42:12

お礼

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

投稿日時 - 2006-11-22 23:06:33

ANo.1

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問