index

2002年 4月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
2002年 5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
2002年 6月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

アレ

  ▽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 の日本語対応なんてのを信じる方がいけなくて, 使う側は初めからそれなりの対応をしなきゃならんのね...

index