|
簡体字中国語のメールでsetclipboardがうまくいかない原因ですが、調べてみ
たら、そもそもsetclipboardは日本語の文字列を前提として動作する作りになっ
てるがために、FormatAttachHeaderで返る中国語文字列をうまく処理できてませ
んでした。
さらに言うなら、たとえばinsert "あいうえお";みたいな文を中国語メールで
実行しても、中国語文字コードとして"あいうえお"が挿入されず、化けた文字列
が挿入されたりします。
今現在の秀丸エディタではこのような問題がエレガントに解決出来てないです。
なので、とりあえずマクロをうまく動作させるには、文字コードをいったん日本
語に変更して、そこでマクロ実行してからまた元の文字コードに戻すって作戦に
するしかありません。
トータルで、以下のようなマクロとなりました。
loaddll "tkinfo.dll";
#charset = charset & 0x1F;
#count = dllfunc("CountCurrentHeader", "X-Attach:");
if( #count == 0 ) {
endmacro;
}
#i = 0;
$result = "";
if( #charset != 1 ) {
#n = dllfunc("SetCharSet", "iso-2022-jp", 1);
}
while( #i < #count ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach:", #i);
#i = #i + 1;
$attach = "X-Attach: " + $attach;
$attach = dllfuncstr("FormatAttachHeader", $attach );
$attach = midstr( $attach, 10, 999 );
$result = $result + "添付ファイル: " + $attach + "\n";
}
setclipboard $result;
if( #charset != 1 ) {
if( #charset == 8 ) {
#n = dllfunc("SetCharSet", "euro", 1);
} else if( #charset == 9 ) {
#n = dllfunc("SetCharSet", "gb2312", 1);
} else if( #charset == 10 ) {
#n = dllfunc("SetCharSet", "big5", 1);
} else if( #charset == 11 ) {
#n = dllfunc("SetCharSet", "korea", 1);
} else if( #charset == 16 ) {
#n = dllfunc("SetCharSet", "russian", 1);
} else if( #charset == 13 ) {
#n = dllfunc("SetCharSet", "centraleuro", 1);
} else if( #charset == 21 ) {
#n = dllfunc("SetCharSet", "thai", 1);
} else {
message "未知の文字コードなので元に戻せません。";
}
}
|
|