2011年12月19日

Re: utf-8 subjectの文字化けについて

村下です

亀レスですみません

2011/12/14(Wed)11:14 "Daichi Kiyono" wrote:
> 初めてメールさせていただきます。
> 清野と申します。
>

> fml8を利用してメーリングリストシステムを運用しているのですが、
> UTF-8でエンコーディングされたメールを受信するとsubjectが
> 文字化けする事象が発生しました。
> (利用しているバージョンはfml 7.98.15-20100306です。)
>
> www.fml.orgに
> > 2011/08/25
> >
> > Mail::Message::Encode
> > bugfix quoted-printable pattern at decode_mime_utf8_to_euc().
> が公開されていたため適用してみたのですが、
> 以下のようなのパターンでの文字化けが解消しませんでした。
>
> ■文字化けが発生するパターン
> ・「utf-8 テスト」のように、subjectに半角スペースが含まれるパターン
> ・「テストテストテストテストテストテスト」のように、ヘッダのsubject部が改行されるパターン
>
> Encode.pmのdecode_mime_utf8_to_eucを
> 以下のように書き換えてみたところ上記パターンでの
> 文字化けは発生しなくなりましたが、他に問題
> となるようなパターンが無いかが分かっていない状況です。
>
> sub decode_mime_utf8_to_euc
> {
> my ($self, $str) = @_;
>
> if ($str =~ /=\?utf-8\?(\w)\?/i) {
> if ($1 =~ /B/i) {
> $str=~ s/\n//s;
> $str=~ s/=\?utf-8\?B\?([A-Za-z0-9+\/]+=*)\?=\s*/$self->raw_decode_base64($1)/gie;;
> } elsif ($1 =~ /Q/i) {
> $str=~ s/\n//s;
> $str=~ s/_/=20/gi;;
> $str=~ s/=\?utf-8\?B\?([A-Za-z0-9+\/]+=*)\?=\s*/$self->raw_decode_qp($1)/gie;;
> }
> }
>
> $str =~ s/\n//g;
> use Jcode;
> return Jcode->new($str,"utf8")->euc;
> }
>
>
> どなたか、解決策をご存知の方はいらっしゃらないでしょうか?

解決方法は不明ですが、Quoted-Printableのコードパターンが違うと思います
#このコードでコミットしたはずなんだが

スペースと改行を考慮するとこんな感じでしょうか?

sub decode_mime_utf8_to_euc
{
my ($self, $str) = @_;

if ($str =~ /=\?utf-8\?(\w)\?/i) {
$str=~ s/\n//g;
if ($1 =~ /B/i) {
$str =~ s/=\?utf-8\?B\?([A-Za-z0-9+\/]+=*)\?=\s*/$1/gi;
$str = $self->raw_decode_base64($str);
} elsif ($1 =~ /Q/i) {
$str =~ s/=\?utf-8\?q\?([\x20-\x7e\t]+?)\?=\s*/$1/gi;
$str = $self->raw_decode_qp($str);
}
}

use Jcode;
return Jcode->new($str,"utf8")->euc;
}


投稿者 xml-rpc : 2011年12月19日 21:34
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/107847
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。