|
IKKI です。こんにちは。
マクロの Unicode 対応についてわからない点が出てきました。
■unichar() の返り値について(1)
strstr("あ", char(ascii("あ"))) == 0
strstr("あ", unichar(unicode("あ"))) == -1 ???
strstr("あ", char(ascii(unichar(unicode("あ"))))) == 0
2行目も 0 になることを期待していました。
"あ" を "\u3042" と書いても結果は同じでした。
これは unichar() の不具合でしょうか?
■unichar() の返り値について(2)
insert char(0x0A); // 改行が挿入される
insert char(0x0D); // 改行が挿入される
insert unichar(0x0A); // ^J が挿入される
insert unichar(0x0D); // ^M が挿入される
3,4行目も改行が挿入されることを期待していました。
これは想像ですが、ひょっとして文字列変数は内部的には2種類あって
(たとえば「SJIS文字列」と「Unicode文字列」のような)、
これらを内容や文脈によって互いに変換したりしているのでしょうか。
■Unicode にしかない文字の判定方法
たとえば「*」が SJIS では表現できない文字だとして、
(a) カーソル位置の「*」を code で読むと 0
(b) 文字列変数中の「*」を ascii() で1バイトずつ読むと 1A 3F (^Z ?)
になります。「*」が Unicode 文字であることの判定方法は
(1) if (code == 0) ...
(2) if (ascii() == 0x1A) ...
という2つが考えられますが、これらの方法は確実でしょうか。
ascii() はすべての Unicod 文字に対して必ず ^Z ? を返すでしょうか。
ちなみに、(b)はどのような意図でこういう値を返しているのでしょうか。
(^Z は文書中に出現しないという仮定がある気がします?)
以上、ご教示いただければ幸いです。
|
|