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