成瀬です。

Tanaka Akira wrote:
> In article <47103C37.5040607 / airemix.com>,
>   "NARUSE, Yui" <naruse / airemix.com> writes:
> 
>> なるほど、今「ASCII-8BIT」と呼ばれているものは、今まで「US-ASCII」の名前
>> に引きずられて、0x00-0x7F がメインで 8bit 部分はおまけという認識だったの
>> ですが、むしろ ASCII 互換バイナリと解釈するべきなのですね。
> 
> US-ASCII はそのうち別個に定義するということで。

基本的に String#encoding は US-ASCII を返さないという方針もありかなぁと
最近思うようになってきました。

>> そうすると、「US-ASCII」との解釈で実装されたと思われる部分、[ruby-dev:
>> 31715] の「7bit ASCII のみからなる文字列は US-ASCII」という機能は、今と
>> なっては若干違和感があるのですがどうなのでしょう。
> 
> これは文字列の意味が局所的に決まるので良いことだと思っています。
> 
> ある時点まで ASCII で書いていたソースで、あるとき UTF-8 の文
> 字列リテラルを書いたとき、そのファイル中の他のすべての文字列
> リテラルも UTF-8 になる、というのはちょっとナニだな、と思い
> ます。

magic comment を用いずに書いていたが、Unicode の範囲を用いたくなったので
coding: utf-8 したということですよね。たしかに他のリテラルも巻き込まれま
すね。

> そうなっても問題なく動くはずだ、という意見もあるのですが、陽
> に encoding メソッドを呼び出した結果を使っているとそうとも限
> らないので、ASCII-8BIT に決めておいたほうが困らないんじゃな
> いかと見込んでいます。

現在でも ASCII-8BIT を返さない 7bit 文字列が存在しうることがこの辺の私の
主張の念頭にあります。最も手っ取り早い作り方は以下の通り。
"hoge".force_encoding("UTF-8")

> US-ASCII が定義されれば、(ぜんぶ 7bit のケースについては)
> ASCII-8BIT でもなくて US-ASCII にするという可能性も出てくる
> かもしれません。まぁ、そうしたとしても "\x80" みたいなのは
> ASCII-8BIT でしょうけど。

思うに方針は二案あって、それが一つの案のように感じます。

# -*- coding: UTF-8 -*-
str = "hoge"
puts str.encoding #=> US-ASCII
str2 = str.force_encoding('EUC-JP')
puts str2.encoding #=> US-ASCII

まで徹底するのが前提になるでしょうか。


もう一案が 7bit かどうかを encoding で知ろうとするのはやめることかと思い
ます。まつもとさんは今この方向なのですかね。JRubyでどうするかという懸念
もなくなるので一石二鳥かも。

# -*- coding: UTF-8 -*-
str = "hoge"
puts str.encoding #=> UTF-8
str2 = str.force_encoding('EUC-JP')
puts str2.encoding #=> EUC-JP

-- 
NARUSE, Yui  <naruse / airemix.com>
DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA