マクロファイルのエンコードによる動作のNo.08307
h-tom さん 14/06/07 21:46
 

h-tom です。

秀丸エディタ:Ver.8.40β19

添付のマクロですが、マクロファイルのエンコードがShift_JISの場合は、意図通り
に動くのですが、マクロファイルのエンコードをUTF-16LEにした場合、動きが変です。

  Shift_JISの場合:デバッガに、No Matchは表示されない。
  UTF-16LEの場合 :デバッガに、No Match1〜3が表示される。

文字列から切り出した文字と、その文字から、文字コード → 文字に変換したものが、
一致しない状態になります。
# $a は 1文字4バイト、比較対象は通常(?)なので、一致していない状態になっている?

//ここから
debuginfo 1;
$a = "秀丸エディタ";
$out = "";
#cnt = 0;
#pos = 0;
#len = wcslen($a);
while(#len > #pos){
    $uni = wcsmidstr($a, #pos, 1);
    if($uni == "") break;
    //unicodeのコードポイント
    #uni  = unicode($uni);
    //Shift_JISのコードポイント
    #sjis = ascii($uni);
    //Shift_JISのコードポイントから文字に変換
    $sjis = char(#sjis);
    //unicodeのコードポイントから文字に変換
    $uni1 = unichar(#uni);
    debuginfo "#sjis:0x" + hex(#sjis) + " --> " + $sjis;
    debuginfo "$uni :0x" + hex(#uni)  + " --> " + $uni + " --> " + $uni1;
    if($uni != char(#sjis)){
        debuginfo "No Match1:" + $uni + " != " + char(#sjis);
    }
    if($uni != $sjis){
        debuginfo "No Match2:" + $uni + " != " + $sjis;
    }
    if($uni != unichar(#uni)){
        debuginfo "No Match3:" + $uni + " != " + unichar(#uni);
    }
    if($uni1!= char(#sjis)){
        debuginfo "No Match4:" + $uni1+ " != " + char(#sjis);
    }
    if($uni1!= $sjis){
        debuginfo "No Match5:" + $uni1+ " != " + $sjis;
    }
    if($uni1!= unichar(#uni)){
        debuginfo "No Match6:" + $uni1+ " != " + unichar(#uni);
    }
    #pos = #pos + 1;
    $out = $out + $uni;
}
message $out;
endmacro;
//ここまで

[ ]
RE:08307 マクロファイルのエンコードによNo.08308
秀丸担当 さん 14/06/09 09:37
 

バグ情報ありがとうございます。
確かにUTF-16のときうまくいっていませんでした。
UTF-16のマクロファイルに関する修正がV8.40β7〜9にかけてあって、「==」だ
と大丈夫だったのですが、「!=」の比較がだめでした。
次のβ版で修正させていただきます。

[ ]