From: "NARUSE, Yui" Date: 2008-01-18T02:59:48+09:00 Subject: [ruby-dev:33162] Re: Binary String 成瀬です。 Hidetoshi NAGAI wrote: >>>> 変換についての文脈では、ASCII only の文字列が ASCII-8BIT で返ってきても >>>> 問題はありませんよね。 >>>> >>>> US-ASCII になった方がいいかもというのには賛成です。以前は「US-ASCII はビ >>>> ルトインではないから」というのが理由だったのですが、今は US-ASCII もビル >>>> トインされるようになったので。 >>>> >>> どんな文脈でもASCII onlyの文字列が「ASCII-8BIT」じゃまずいですよ。 >>> 「テキストなのにASCII-8BITなのはおかしい」って話だったじゃないですか。 >> ASCII only はエンコーディングに関わらず結合・比較等において特別扱いなの >> で、dummy 以外では実際上問題は起きないと思います。 > > え? この状況は,単にまだ対応できていない/対応が確定していないという > ことではないのですか? > [ruby-dev:33110] で いえ、[ruby-dev:32046] で一度出ているのですよ。当時と状況が若干異なって はいますが。 >> なので、[ruby-dev:33049] で言っている通り文字列には encoding が必要だ、 >> encoding を設定しよう、となるわけです。テキストデータなのに ASCII-8BIT >> のままになっている方がおかしいんですよ。そこから目をそむけて ASCII-8BIT >> が混沌としているままな限り、一部のバイナリデータを BINARY で隔離しても問 >> 題の解決にはなりません。 >> >> で、実際のところ、テキストデータに encoding をきちんと設定すれば、ASCII- >> 8BIT な string はバイナリデータとしてみなしてしまうので問題ないのではな >> いか。何かダメな例ある?というのがこれからの話でしょうか。 > > と述べられてますが,これを言い換えると,「encoding を指定すれば > ASCII-8BIT は付かないんだから,encoding を指定していないのが悪い. > だから ASCII-8BIT を binary としても問題ない」ということですよね? > つまりは,有効な encoding を指定している限り, > 本来は ASCII-8BIT が付与されてはならないのではないのですか? > 今回の例は有効な encoding を指定している例と考えていいですよね. > > # 「矛盾していない」という条件も付くのかも知れませんが, > # 少なくとも今回の例は encoding 指定との矛盾はしていないはずです. > > そこまで強くおっしゃっていたので,互換性を捨てる覚悟をして > ASCII-8BIT を binary として扱うことに妥協したのですが... > > ですから,今回の例を「事実上問題が起きないと思います」で > スルーされてしまうと困ります. > > 現在のところは問題は生じないはずですが,将来,Tcl/Tk 上において > StringObj 系の関数で処理するか ByteArrayObj 系の関数で処理するかで > 問題が発生する可能性がないとは言い切れません. > 「encoding を指定すれば ASCII-8BIT は付かない」という前提であれば, > そうした場合でも「正しく encoding を設定することで対応してください」 > と言えますが,その前提が成り立たないならば答えの前に > 「文字列ひとつひとつに」というのを付けなければならなくなります. > それはあまりに要求が厳しいのではないでしょうか. 懸念を感じるのはごもっともで、当時も今も違和感は感じてはいるのですが、田 中さんの言う局所性を破る程度に強い根拠を結局見つけられなかったのですよ。 根拠がない以上あまり強くは言いづらいのです。 >>> この例だったら、エンコーディング指定してある「euc-jp」になるか >>> お二人の言うように「US-ASCII」になるべきだと思います。 >> が、この意見には賛成です。もっとも、以前は「EUC-JP」になるべきじゃないか >> なぁと思っていたんですが、実際問題としては ascii only な文字列のエンコー >> ディングは飾りにすぎないのであまり強い意見は持っていません。 > > 最初は私も euc-jp ではと思いましたが,8bit char を含んでいないなら > euc-jp でない方が便利がいいという判断で行っているのかもと思い, > US-ASCII と書いてました. > ですので,「ASCII-8BIT ではまずいだろう」という以上には > どうすべきというような意見は特にありません. 当時いろいろ考えたのですが、わたしの中では ascii only の文字列は encoding を信用してはならない、という結論に落ち着きました。というのも、 中身が ascii only の場合は encoding に何がついていようとも ascii only で あるという情報が優先するべきに思われたので。(例外は dummy 等 ASCII compatible でない時) -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA