From: "U.Nakamura" Date: 2008-11-12T21:44:53+09:00 Subject: [ruby-dev:37081] Re: [Feature #747] /\A/u ignores BOM こんにちは、なかむら(う)です。 In message "[ruby-dev:37077] Re: [Feature #747] /\A/u ignores BOM" on Nov.12,2008 18:40:30, wrote: > > /\A/uがBOMにヒットしないのが嬉しくないです。普通、BOMはあるとすれば文字列の先頭に付いていることが多いので、/\A/uがBOMにヒットするのが自然だと思います。 > > http://www.ietf.org/rfc/rfc3629.txt > RFC 3629 を読むと、内部処理には U+FEFF を特別扱いしないことを推奨してい > るように思いますが、どうなんでしょう。 というわけで、以前の議論で結論が出ずに見送りになりましたが、 やはりBOMを理解するopenが必要なんじゃないでしょうか。 なお以前の議論の際の結論自体は[ruby-dev:32981]にまとめてあり ますが、あの時は書き込み時にBOMをどう扱えばいいのか判断できな かったのが見送りの主原因でした。 今回は、書き込みは現状どおりとして、読み込み時のみBOMを取り扱 うという案を提案してみます。 # なお1.9.1に入れることは想定していません。 * 対象となるのは"r"のみ。"r+"、"w+"、"a+"は対応しない。 * "r"時のエンコーディング名指定として、"utf-7-bom"、"utf-8-bom"、 "utf-16le-bom"、"utf-16be-bom"、"utf-32le-bom"、"utf-32be-bom" をサポートする。 これらが指定されたとき、BOMがあるかどうか判断できるまでファ イル先頭を読み、BOMがあればそのBOMに従ったエンコーディング が指定されたとみなして、読んだBOMは捨てる。 BOMがなければ既に読んだ分をungetbyteした上で"-bom"なしのエ ンコーディングが指定されたとみなす。 * 他は現状を変更しない。つまり例えば"w:utf-8-bom"などの指定は Unsupported encodingとして無視される。 ※UTF-7にBOMがあるのかどうかよくわからないんですが、絶対にな いんだったら上記からutf-7-bomは取り除きます。 それでは。 -- U.Nakamura