▽20020530b
#日記
ColdFusion の変なバグでハマる. いやハマったのはあたしじゃなく後輩K氏なんですが.
CF では「is」という演算子があって,perl でいう「eq」, つまり文字列の比較を行なう...んだと思っていたんだけど, こいつは「大文字小文字を区別しない」とゆー機能があるので, 「"ク" is "ハ"」は true になる. Shift JIS の 2バイト目が N と n だから.
「Shift JIS 使わなきゃいいじゃん」と思ってもそうはいかない. こいつ,Windows 版をベースに作られてるので, Solaris だろうと何だろうと日本語対応が完全に SJIS のみなのだ! (NT ベースなら UNICODE になれよとか思いつつ)
で,それはまだ納得できる範囲なのだけど,今回の事象はさらに変. 「"油" is ""」が true になるのだ. いくら何でも空文字列との比較で true はネーだろ? とか思っていろいろ調べると, どうやら「特定の文字コードだけから成る文字列」は全て is "" が true になるらしい.
0x00 / 0x80 / 0x96 / 0xAE / 0xC1 / 0xDA / 0xEA / 0xFB~0xFE
これらだけから成る文字列は,例えそれが何文字であろーとも true になる. 漢字でいうと「油」とか「癒」とかがソレだ.
で,これを CF のメーリングリストに流してみると, 「うちでは全角を含む文字列は全て compare( ) で比較します」との御意見が. うぅっ,つまり CF の日本語対応なんてのを信じる方がいけなくて, 使う側は初めからそれなりの対応をしなきゃならんのね...