Feature #1951
closedopenのBOM指定拡張
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を見る ORUTF-*
と指定、というイメージ)
というものを考えています。
皆さんはどのように思われますか?
Updated by naruse (Yui NARUSE) over 15 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 usa (Usaku NAKAMURA) over 15 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 matz (Yukihiro Matsumoto) over 15 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を見る ORUTF-*
と指定、というイメージ)
というものを考えています。
皆さんはどのように思われますか?
"BOM|UTF-*
"という指定に若干の抵抗を覚えるのですが、基本的に
賛成です。
Updated by naruse (Yui NARUSE) over 15 years ago
とりあえずBOM|UTF-*
への変更をr24605で入れました。
Updated by mame (Yusuke Endoh) over 14 years ago
- Status changed from Assigned to Closed