From: Yukihiro Matsumoto Date: 2007-10-09T23:13:15+09:00 Subject: [ruby-dev:31995] Re: multibyte string/regex literal with escape sequence まつもと ゆきひろです In message "Re: [ruby-dev:31991] Re: multibyte string/regex literal with escape sequence" on Tue, 9 Oct 2007 19:43:18 +0900, Tietew writes: |バイナリから/へのエンコーディング変換が(通常)できないようにす |ると、フールプルーフとして有効じゃないかと思います。 もうちょっと説明していただけませんか。7bit ASCIIと「バイナリ」 の区別が有益かもしれないとは思い始めてはいますが、エンコーディ ング変換が通常できないというのは、結構使いにくそうな気がしま す。 |油断するとUCS-2で読み込んだ(と思っていた)文字列が実はバイナリ |(ASCII)で、それをShift_JISに変換しようとしてぼろぼろになる、と |か普通にやりそうです。 「UCS-2で読み込んだと思っていた文字列が実はバイナリ」という状 況はイメージしにくいです。UCS-2である(はずの)ファイルから読み 込んだのであれば、それが壊れていてUCS-2の範囲内におさまって いなくても自動的に「バイナリ」になるような仕組みを提供する予 定はありません。ので、 |そんなとき、壊れた文字列や Iconv::IllegalSequence を前に悩むより |Cannot convert encoding to/from binary stream とか出てくれた方が |有り難い。 こういう例外が発生する状況はなかなか考えにくいように思います。 * 文字列はUCS-2のはず(エンコーディングもUCS-2) * 本当にUCS-2 → 問題なし * 壊れている → 壊れた文字列/IllegalSequence * 文字列はUCS-2のはず(エンコーディングはバイナリ)。 変換またはエンコーディング設定が必要 * 本当にUCS-2 → 問題ない * 壊れている → 壊れた文字列/IllegalSequence 上記の「有り難い」が成立するためには * 正しくUCS-2な文字列はUCS-2エンコーディング。 壊れた文字列はバイナリエンコーディング である場合だと思いますが、プログラム中でどういう経緯でそのよ うにエンコーディングが設定されるのか、なかなかイメージできま せん。 |MIMEでカプセル化するとき等も、ASCIIなら中身は7bitなので |quoted-printable を選択するが、バイナリなら base64 を選択すべし |とか。 quoted-printableもbase64も両方とも任意のバイト列を表現できま すから(表現効率は違いますが)、ASCIIならquoted-printableという 基準は適切ではないかもしれません。 まつもと ゆきひろ /:|)