ねこ丸です。
Ruby でのマルチバイト文字を含む文字列処理について自分の理解を確認さ
せてください。
- まずマルチバイト文字をそのままスクリプト中に書く場合、$KCODE が指定
されていないと sjis の2バイト目などの問題が起きる。逆に言うと指定さ
れていれば単純な問題は起きない。
- $KCODE が指定されていると正規表現リテラルの中でマルチバイト文字列を
書いても正常に扱われる。指定していなくても、Regexp.new() の第3引数で
文字コードを指定すれば、正規表現リテラルではないが正規表現オブジェク
トとして正常に扱われる。
- 上のいずれの指定も行われていない場合、正常に正規表現マッチは行われな
い。
- 正規表現オブジェクトとアクションの対象となる文字列オブジェクトの文字
コードは一致していなければいけない。逆に、一致していればそれが $KCODE
で指定した文字コードと食い違っていてもよい。(つまり、$KCODE = 'e'
の環境で sjis 文字列の正規表現マッチが行える。)
- jcode は $KCODE の値に影響を受けるので、jcode を利用して split とか
行う場合は split 対象の文字列の文字コードに合わせて $KCODE の値を変
更してやる必要がある。例えば全体的には EUC のコードだが、sjis 文字列
をそのまま split したい場合は $KCODE = 's'; split; $KCODE= 'e' とす
る必要がある。
今のところ確認したのはこんな感じです。いやそれは勘違いだ、いやこれも
気をつけておけ、というかこうすればもっと楽、というのがあれば指摘しても
らえないでしょうか。
--
ねこ丸