From: "NARUSE, Yui" Date: 2008-01-01T15:38:37+09:00 Subject: [ruby-dev:32915] Re: NKF,Kconv 成瀬です。 Tanaka Akira wrote: > In article <4779C129.9060907@airemix.com>, > "NARUSE, Yui" writes: > >> メソッドの趣旨からいってバグだと思います。一応str.dup.force_encoding >> (str.encoding) で直りますが、ASCII-8BIT の正規表現は Shift_JIS や UTF-8 >> にもマッチさせたいような。その辺どうなのでしょうね。 > > その要求はすでに何回かあって、どうも珍しくないようですが、文 > 字の半分とかにマッチされると MatchData#begin あたりが定義で > きないので、中身のバイト列を扱いたいのであればあきらめて > str.dup.force_encoding("ASCII-8BIT") してください。 これ自体は納得できるのですが、マッチさせて捨てるだけなのにdupするのがな んか無駄な気がするのが引っ掛かる点でしょうか。ASCII-8BIT の正規表現を マッチさせるのは、文字列をバイナリと解釈してマッチするという趣旨であると 解釈して、暗黙にdup.force_encoding("ASCII-8BIT") できませんかね。 「MatchData#begin あたりが定義できない」というのも返す文字列を ASCII-8BIT にすれば回避できるような気がするのですが。 # 不特定のエンコーディングの文字列に 7BIT ASCII をマッチさせたい事例は思 い浮かんでも、8BIT をマッチさせたい事例はあまり思い浮かびませんが。 > しかし、引数にはバイト列を ASCII-8BIT な文字列として渡すこと、 > という仕様にすれば、変更の必要はないのかもしれません。 メソッドの趣旨からすればこれが妥当な気もするのですが、少し面倒かなぁ。 > また、例えば、バイト列が ISO-8859-1 に対応して UTF-8 に変換 > されたものを考えて元のバイト列を扱いたいというのであればそれ > はそれで違った方法が必要でしょう。 これは渡されたencodingに関わらず、strに含まれる文字群の文字集合がISO- 8859-1 に含まれるという趣旨です?こういうの欲しい気はしているんですけどね。 > 結局、バイト列をどう表現してメソッドに渡すかという仕様の問題 > になります。つまり、String がバイト列から文字列に変わってし > まったので、それに対応した仕様を検討しなければならないという > ことでしょう。 結局のところ、String#valid_encoding? を使ってくださいということで、 Kconv.is* は全廃でいい気もしているのですよね -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA