In article <6.0.0.20.2.20071214170214.092683a0 / localhost>,
  Martin Duerst <duerst / it.aoyama.ac.jp> writes:

> 同格ではありません。ASCII-8BIT は asciicompat ですが、binary
> はそうではありません。

そういう binary なエンコーディングについては以前考えて
[ruby-dev:32042] を書きました。

binary は ASCII 文字とまったく関係がないというのは正しいとは
思うのですが、それって使いやすいんでしょうか。あるいは、人間
はそのように認識しているんでしょうか。GIF ファイルの先頭 3バ
イトが GIF で始まるというように (ASCII 互換な環境で生きてい
る) 人間は ASCII とバイナリの区別をそれほど厳密には行ってい
ないのではないでしょうか。

また、人間の認識に比べれば小さな話ではありますが、現実的な問
題として Ruby の文字列操作は ASCII の文字に依存しているとこ
ろが多々あります。

たとえば、正規表現には繰り返しを表現する ASTERISK という文字
が必要です。そういう文字が存在しないエンコーディングでは繰り
返しをどう表現したら良いのでしょう?

正規表現でなくても、String#count は HYPHEN-MINUS を使って文
字の範囲を表現しますし、CIRCUMFLEX ACCENT で補集合を表現しま
す。また REVERSE SOLIDUS でエスケープを表現します。同様な表
現は String#delete や String#squeeze にも見られます。

binary には HYPHEN-MINUS, CIRCUMFLEX ACCENT, REVERSE SOLIDUS
という文字は存在しないと考えられますが、String#count はどの
ように動作すべきでしょう?

他にも String#dump には QUOTATION MARK などが必要です。sub
や gsub の第2引数には REVERSE SOLIDUS や DIGIT ONE 等が必要
です。

もし、ASCII の文字を表現不能な binary というエンコーディング
を導入するなら、そのような問題をクリアする必要があるのではな
いでしょうか。
-- 
[田中 哲][たなか あきら][Tanaka Akira]