|
皆さんこんばんは。
杉浦 まさき です。
先日秀丸会議室でマクロの文字列系関数の2バイト文字絡みの
話題が出ていたのでもしかしたら既出かもしれませんが、
個人的には結構ショッキングな(笑)発見だったので
その勢いで書いてしまいます(^^;。
ascii() 関数を2バイト文字に対して適用した場合
2バイト分をまとめて 16bit 整数として返す、
という仕様ですが、以下のようにわざと2バイト文字の
1バイト目(コード=0x??)を切り出した
(1文字からなる)文字列に適用すると、
0x??00 という値が返ってくるんですねぇ…今まで気づかなかった(笑)。
$a = midstr("あ", 0, 1); // 2バイト文字の1バイト目を切り出す message str
(ascii($a)); // == 33280 == 0x8200 が返る
というわけで、
if (ascii(midstr($s, #i, 1)) & 0x80) {
// 2バイト文字の1バイト目だった
}
というかっこいい(笑)コードはNGで、
if (ascii(midstr($s, #i, 1)) > 0x7F) {
// ..
}
というコードは(Win32 環境では)正常に動作する、と。いや〜、デバッグしててずい
ぶん悩みました(苦笑)。
|
|