Perl Script Laboratory

"^"(0x5E)を含む文字一覧表

CGIの解説書などで、データのセパレータとして「^(0x5E)」という文字を使っているのを見た方は多いと思いますが、これをセパレータに使う以上、データの中に含まれる"^"をデコードの際に取り除かなければなりません。しかし、S-JISではこの"^"を2バイト目に含む文字があるため、不具合が生じます。
また、パターンマッチで変数を使用する場合、その変数に「^(0x5E)」が含まれていると、メタ文字と解釈されるために、たいていパターンマッチに失敗します。Perlではパターンに変数が使われていると実行時にコンパイルしますので、「^(0x5E)」を含む文字をマッチングしようとしたときだけ Server Errorとなるはずです。

回避方法

  • セパレータを他の文字に変更する
    これしか方法はありません。私は現在もっぱら「\t(水平タブ:0x09)」をセパレータに使っています。水平タブコードはS-JISに含まれませんし、その上フォームでは入力フィールドの移動に使われるので、フォームからの入力にタブが含まれることがないからです。
  • パターンマッチの前にEUCにコード変換する
    通常のPerlで日本語のパターンマッチをする場合は、文字列をあらかじめEUCコードに変換しておくのがいいでしょう。コード変換はjcode.plなどを使います。

以下に、「^」を含む文字の一覧を挙げておきます。全部で39文字あります。

文字 コード
/ 81 5E
タ 83 5E
Э 84 5E
運 89 5E
蛙 8A 5E
疑 8B 5E
型 8C 5E
洪 8D 5E
賛 8E 5E
戎 8F 5E
文字 コード
真 90 5E
楚 91 5E
耽 92 5E
顛 93 5E
膿 94 5E
豹 95 5E
某 96 5E
与 97 5E
録 98 5E
竸 99 5E
文字 コード
喊 9A 5E
嫂 9B 5E
弯 9C 5E
擔 9D 5E
杰 9E 5E
歐 9F 5E
濘 E0 5E
畤 E1 5E
秧 E2 5E
綽 E3 5E
文字 コード
膺 E4 5E
蘓 E5 5E
訖 E6 5E
躾 E7 5E
鐃 E8 5E
饋 E9 5E
鷽 EA 5E
�^ ED 5E
�^ EE 5E