From: "U.Nakamura" Date: 2008-01-07T20:21:14+09:00 Subject: [ruby-dev:32964] Re: Shift_JIS variants and UTF-16 support こんにちは、なかむら(う)です。 In message "[ruby-dev:32960] Re: Shift_JIS variants and UTF-16 support" on Jan.07,2008 19:30:41, wrote: | |RFC 2781 の 4.3 Interpreting text labelled as UTF-16 では、 | |BOM を見て判別 → BOM がなかったら big endian と解釈する。(SHOULD) | |となっています。 | | というルールに従うとして、それを今のRuby M17Nの延長線上で、エ | ンコーディング名に指定するというのがどういうことになるか考え | てみると | | = open(read)のモードとして | BOMを見て判別 | → UTF-16だけ先頭2バイトを読み込むルーチンを追加す | る必要あり | 正直めんどくさい | | = open(write)のモードとして | 文字列ひとつひとつにBOMが付いているとは考えにくい | → writeではエラーということ? | 特別扱いはめんどくさい | | = String#encodeの引数として | 文字列一つ一つにBOMはないだろう。 | → encodeではエラーということ? | 特別扱いはめんどくさい | | ということで、あまり現実的ではないようです。であれば、このルー | ルを尊重するのであれば | | そもそもエンディアンなしのUTF-16というエンコーディングは許さない | | というのが唯一の現実的な解のような。 特別扱いはめんどくさい、というのは「めんどくさくない誰かが汗 をかけばいいじゃん」ということにして考えると、例えば以下のよ うなものはどうでしょうか。 = 前提 "UTF-16"というEncodingは用意しない。 = open(read)のモードとして "utf-16"が指定された場合はBOMを読んで"UTF-16BE"または"UTF-16LE" どちらのEncodingになる。 BOMがなければ"UTF-16BE"。 "utf-16be"が指定されてBOMがないまたはBOMがBEであれば"UTF-16BE"、 BOMがLEであれば... 例外? "utf-16le"が指定されてBOMがないまたはBOMがLEであれば"UTF-16LE"、 BOMがBEであれば... 例外? = open(write)のモードとして "utf-16"は受け付けない(InvalidArgument) = String#encodeの引数として "UTF-16"というEncodingはないので問題ない。 それでは。 -- U.Nakamura