Project

General

Profile

Actions

Feature #1951

closed

openのBOM指定拡張

Added by naruse (Yui NARUSE) over 15 years ago. Updated about 7 years ago.

Status:
Closed
Target version:
[ruby-dev:39106]

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 2 (0 open2 closed)

Related to Ruby master - Feature #747: /\A/u ignores BOMRejectednaruse (Yui NARUSE)11/12/2008Actions
Related to Ruby master - Feature #802: IO.open optional argument to properly handle BOMsClosedmatz (Yukihiro Matsumoto)11/30/2008Actions
Actions #1

Updated by naruse (Yui NARUSE) over 15 years ago

  • Category set to M17N
Actions #2

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とみなし保持します。
なかった場合は無論何も起きません。

Actions #3

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, 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

Actions #4

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 writes:

この問題に対する解決案として、

  • UTF-*-BOM はBOMを捨てるだけ。別のencodingだった場合は例外
  • BOM|UTF-*を追加、これが現在のUTF-*-BOM相当の動作 (BOMを見る OR UTF-*と指定、というイメージ)
    というものを考えています。
    皆さんはどのように思われますか?

"BOM|UTF-*"という指定に若干の抵抗を覚えるのですが、基本的に
賛成です。

Actions #5

Updated by naruse (Yui NARUSE) over 15 years ago

とりあえずBOM|UTF-*への変更をr24605で入れました。

Actions #6

Updated by mame (Yusuke Endoh) over 14 years ago

  • Status changed from Assigned to Closed
Actions #7

Updated by nobu (Nobuyoshi Nakada) about 7 years ago

  • Description updated (diff)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0