|
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;
//ここまで
|
|