[ 新規に投稿する ]

受信ログフォルダで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に変換した文字
>列を返すように修正させていただきます。

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

[ 新規に投稿する ]