From: "NARUSE, Yui" Date: 2008-01-07T21:59:42+09:00 Subject: [ruby-dev:32969] Re: Shift_JIS variants and UTF-16 support 成瀬です。 U.Nakamura wrote: > In message "[ruby-dev:32966] Re: Shift_JIS variants and UTF-16 support" > on Jan.07,2008 21:00:47, wrote: > | > = open(write)のモードとして > | > "utf-16"は受け付けない(InvalidArgument) > | > | BOM をつけて出力する手段が欲しい気がします。 > > "w:utf-16be" や "w:utf-16le" は当然BOMをファイル先頭に出力す > るという想定でした。 RFC 2781 3.3 に“Systems labelling UTF-16BE text MUST NOT prepend a BOM to the text.”とあるので、"w:utf-16be" や "w:utf-16le" では BOM は出力し ないことになるかと思います。 > "r+"や"w+"、"a"などは、たぶん既にBOMがあると期待して何もしな > いのでしょう。openしてからset_encodingする場合も同様。 > ... とかいうことを考え出すととたんに話が難しくなりますね。 > 果たしてこれでいいのかな。 わたしが気づいたのは truncate(0) した後どうしよう、っていう・・・。 > | > = String#encodeの引数として > | > "UTF-16"というEncodingはないので問題ない。 > | > | これだけだと問題ないような気がするのですが、出力時に BOM がつけられるこ > | とを期待する文字列の存在を考えると悩ましいところです。 > > Stringオブジェクトが、明示的にそういう文字列操作をやらない限 > りはBOMを気にする必要はない(「出力」を気にするのはIOの仕事)と > 思うのですが、何か私がポイントを見落としてるのでしょうか。 先述の通りなので、UTF-16BE 文字列を "w:utf-16be" すると BOM がつかないの でドウシヨウ、と思ったのですが、たしかにそれは IO の仕事ですね。UTF-16BE 文字列を "w:utf-16" すると BOM 付き UTF-16BE、UTF-16LE 文字列を "w:utf-16" すると BOM 付き UTF-16LE という感じですかね。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA