受信ログフォルダでSubject取得No.02752
K'zawa さん 18/01/16 17:16
 
こんにちは、K'zawaです。

受信ログフォルダで、下記のようなマクロを実行すると化ける場合と化けない場合が
あります。
Subjectの中身が「=?ISO-2022-JP?B?…」なら化けないのですが、「=?UTF-8?B?…」
だと化けるようです。デコードすれば普通の日本語なんですが。
何か間違っているでしょうか?


loaddll "tkinfo.dll";
#n = dllfunc( "SetJapaneseCodePageMode", 1 );

$s = dllfuncstr( "CurrentHeader", "Subject" );
$s = dllfuncstr( "DecodeHeader", $s );
message $s;

#n = dllfunc( "SetJapaneseCodePageMode", 0 );
freedll;

[ ]
RE:02752 受信ログフォルダでSubject取得No.02753
秀まるお2 さん 18/01/16 17:59
 
 DecodeHeader関数ですが、BASE64やQuoted-Printableのデコードはするんですが、
文字コードの変換まではしないです。なので、「=?utf-8?b?....」のような文字列を
デコードすると、結果がutf-8のままになって、それで化けてしまうようです。

 文字コードの変換(Shift-JISへの変換)も含めてデコードする関数は、今ちょっ
と探した限りは無さそうです。しいてやるとしたら、一回ファイルに保存して読み込
むような処理を、秀丸エディタ相当ウィンドウをダミーで作ってやるしか無いです。

 試しにマクロ作ってみましたけども。ちゃんと動くかどうか怪しいです。

 DecodeHeader関数に第2パラメータを追加して、そこに数値の1を指定したら、自
動的にShift-JIS文字コードに変換するってしようと思います。それでいいですよね。
次のβ版でそうしようと思います。


--------------------------------参考マクロ------------------
    loaddll "tkinfo.dll";
    #n = dllfunc( "SetJapaneseCodePageMode", 1 );

    $s = dllfuncstr( "CurrentHeader", "Subject" );
    $s2 = dllfuncstr( "DecodeHeader", $s );
    $code = dllfuncstr("ToUpper", $s);
    if( strstr( $code, "=?UTF-8?" ) >= 0 ) {
        #handle = hidemaruhandle(0);
        #n = dllfunc("NewMail");
        #handle2 = hidemaruhandle(0);
        #n = dllfunc("SwitchHeaderView", 0);
        gofiletop;
        beginsel;
        gofileend;
        delete;
        insert $s2;
        $filename = dllfuncstr("HomeDir") + "TempMail\\temp.txt";
        saveas $filename, sjis;
        gofiletop;
        beginsel;
        gofileend;
        delete;
        insertfile $filename, utf8;
        gofileend;
        $s2 = gettext( 0, 0, x, y );
        setactivehidemaru #handle;
        closehidemaruforced #handle2;
    }

    message $s2;

    #n = dllfunc( "SetJapaneseCodePageMode", 0 );
    freedll;



[ ]
RE:02753 受信ログフォルダでSubject取得No.02754
秀まるお2 さん 18/01/16 18:45
 
 やっぱり、DecodeHeaderにパラメータ追加はせずに、常にShift-JISに変換した文
字列を返すように修正させていただきます。

 次のβ版で対応します。

[ ]
RE:02754 受信ログフォルダでSubject取得No.02755
K'zawa さん 18/01/16 22:15
 
秀まるおさん、こんにちは。
K'zawaです。

> やっぱり、DecodeHeaderにパラメータ追加はせずに、常にShift-JISに変換した文字
>列を返すように修正させていただきます。

はい、わかりました。よろしくお願いします。

[ ]