Feature #1951
openのBOM指定拡張
| Status: | Closed | Start date: | 08/18/2009 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | % Done: | 0% |
||
| Category: | M17N | |||
| Target version: | 1.9.2 |
Description
#747と#802で議論された、openのBOM指定拡張ですが、現在の仕様は、 * BOMを捨てる * BOMを見てencodingを設定する という2つの機能が混在しています。 このために、たとえば「UTF-8-BOM」という指定でも、 BOMがUTF-16LEを示していた場合には実際に返ってくるStringはUTF-16LEになってしまいます。 この問題に対する解決案として、 * UTF-*-BOM はBOMを捨てるだけ。別のencodingだった場合は例外 * BOM|UTF-*を追加、これが現在のUTF-*-BOM相当の動作 (BOMを見る OR UTF-*と指定、というイメージ) というものを考えています。 皆さんはどのように思われますか?
Related issues
| related to ruby-trunk - Feature #747: /\A/u ignores BOM | Rejected | 11/12/2008 | ||
| related to ruby-trunk - Feature #802: IO.open optional argument to properly handle BOMs | Closed | 11/30/2008 |
History
Updated by Yui NARUSE over 2 years ago
- Category set to M17N
Updated by Yui NARUSE over 2 years ago
- Target version set to 1.9.2
記述が正確でないという指摘を受けたので訂正します。 現状の機能は、 「BOMに従ってencodingを設定するが、BOMがない場合のデフォルト値を指定できる」 というものですが、現状の指定方法である「UTF-*-BOM」から見て直観的ではありません。 ゆえに、「BOM|UTF-*」と変更する案です。 念のため、「BOM|UTF-*」の動作をおさらいしますと、 冒頭にU+FEFFがあった場合、これをBOMとみなし、それに基づきencodingを設定します。 この場合は冒頭のU+FEFFはBOMなのですから、これを読み込んだStringには含めません。 冒頭にU+FEFFがなかった場合、後半のUTF-*をencodingとして設定します。 一方で、「UTF-*-BOM」に対しては、encodingがUTF-*でかつ、冒頭のU+FEFFはBOMであるという指定です。 この場合も、冒頭のU+FEFFはBOMなのですから、これを読み込んだStringには含めません。 読み込んだBOMや文字列が指定のencodingと矛盾した場合は例外が上がります。 冒頭にU+FEFFがなかった場合は、普通のUTF-*と動作が変わりません。 ちなみに、普通の「UTF-*」だった場合は、冒頭にU+FEFFがあった場合、これをZWNBSPとみなし保持します。 なかった場合は無論何も起きません。
Updated by Usaku NAKAMURA over 2 years ago
こんにちは、なかむら(う)です。 In message "[ruby-dev:39111] [Feature #1951] openのBOM指定拡張" on Aug.19,2009 01:10:38, <redmine@ruby-lang.org> wrote: > 現状の機能は、 > 「BOMに従ってencodingを設定するが、BOMがない場合のデフォルト値を指定できる」 > というものですが、現状の指定方法である「UTF-*-BOM」から見て直観的ではありません。 > ゆえに、「BOM|UTF-*」と変更する案です。 元仕様、つまり、「UTF-*-BOM」という指定を提案したのは私だった わけですが、trunkに入れてもらった直後くらいから非常に後悔して おります。 というわけで、「BOM|UTF-*」と変更することに全面的に賛成です。 # 今なら間に合いますよね? 以下は、「BOM|UTF-*」への変更が採用されるという前提で、頭の体 操レベルの提案です。 なお、「BOMに従ってencodingを設定する」と「BOMがない場合のデ フォルト値を指定する」という機能は分割可能と考えることもでき なくはありません。 その場合、「BOM」というencoding指定を導入し、BOMがなければ例 外を発生させる、という案があります。 実用性がある気はあまりしないのですが、需要はあるでしょうか? また、「BOM|UTF-*」に限らず、「BOM|任意のエンコーディング」と いう指定を許すという案もあります。 これまた実用性はなさそうですが、需要はあるでしょうか? それでは。 -- U.Nakamura <usa@garbagecollect.jp>
Updated by Yukihiro Matsumoto over 2 years ago
まつもと ゆきひろです In message "Re: [ruby-dev:39106] [Feature #1951] openのBOM指定拡張" on Tue, 18 Aug 2009 23:47:17 +0900, Yui NARUSE <redmine@ruby-lang.org> writes: |この問題に対する解決案として、 |* UTF-*-BOM はBOMを捨てるだけ。別のencodingだった場合は例外 |* BOM|UTF-*を追加、これが現在のUTF-*-BOM相当の動作 (BOMを見る OR UTF-*と指定、というイメージ) |というものを考えています。 |皆さんはどのように思われますか? "BOM|UTF-*"という指定に若干の抵抗を覚えるのですが、基本的に 賛成です。
Updated by Yui NARUSE over 2 years ago
とりあえずBOM|UTF-*への変更をr24605で入れました。
Updated by Yusuke Endoh almost 2 years ago
- Status changed from Assigned to Closed