From: Kouhei Sutou Date: 2010-11-21T18:36:40+09:00 Subject: [ruby-dev:42613] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv 須藤です。 うーん、うーん、複数のことが同時に進められている気がするので すが、成瀬さんはそのつもりで進めていますか?私は1つずつがいい のですが。。。 ふたつのことが同時に進んでいる気がしています。 1. XML宣言をエンコーディングを文字列で表現すること。 2. XML書き出し時にエンコーディングを変更できるようにするこ と。 1.と2.は独立していると思っているので、もし、同時に進めようと しているなら別々にしてほしいです。 と、私は↑のように思っているのですが、これってあっていますか? あっているのなら、どちらから進めるのがよいか教えてもらえます か?あっていないなら、現在、何が進んでいるのかを教えてほしい です。。。 In <4CE78D29.6040803@airemix.jp> "[ruby-dev:42611] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv" on Sat, 20 Nov 2010 17:56:12 +0900, "NARUSE, Yui" wrote: > 成瀬です。 > >> In<4CE77185.5080603@airemix.jp> >> "[ruby-dev:42608] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv" on Sat, 20 Nov 2010 15:58:16 +0900, >> "NARUSE, Yui" wrote: >> >>>> 内部ではそれでもよいと思いますが、利用者がXML宣言のエンコー >>>> ディングを使いたいときに不便だと思っています。例えば、日本語っ >>>> ぽいものだけ扱い時にエンコーディングがShift_JISかEUC-JPか >>>> UTF-8以外のものは使わないとか、というケースを考えていました。 >>>> このとき、利用者がいちいちREXMLから返されるエンコーディング >>>> を正規化して比較しなければいけないのは面倒だと考えています。 >>> >>> そういう要求が出てくることまでは想像できますが、「日本語っぽいものだけ扱い時」 >>> には、現状 UTF-8, Shift_JIS, Windows-31J, EUC-JP, CP51932, eucJP-ms を >>> 見ないといけないんですよね。 >>> >>> 現実的にはエンコーディングで判定するよりも、そのニーズの場合、 >>> XML 全体が CP932 に変換できるかで判定した方がベターだと思います。 >> >> 私はそのあたりはよくわからないのですが、CP932は日本語の全部 >> の文字を含んでいるんでしたっけ?(EUC-JPとCP932を相互に変換 >> しても欠落する情報がないかどうか) >> >> 含んでいないのであれば、上記のエンコーディングかどうかを判断 >> した方がよさそうな気がします。 > > EUC-JP から CP932 に変換すると、補助漢字が落ちますね。 > > しかし、わたしの知る限り「日本語っぽいものだけを扱いたい時」というのは、 > (1) 日本語の文字だけを扱いたい > (2) 日本語しか想定していない処理がある > (3) 右から左に書くような文字やゼロ幅文字等を蹴りたい > くらいなので、その場合エンコーディングで判定するよりも、 > 内容で判定した方が妥当だと思っています。 > > 一方で、特に理由無く日本語に限定したいというのならば、それはわざわざ > 気遣うべき処理でも無いので、upcase なり Encoding.find なりを > 使って頂いた方がよいでしょう。 > >>>> また、XML宣言で用いるエンコーディングと変換で用いるエンコーディ >>>> ングは同じものにするべきだと思っています。そうしないと、 >>>> REXMLが出力したXMLをパースする他のXMLパーサが困ると思っていま >>>> す。XML宣言のエンコーディングがShift_JISなのにXMLの中に >>>> Shift_JISにはない文字が入ってしまうかもしれないということです >>>> よね? >>> >>> 「他のXMLパーサ」のためにまさにこれが必要なのです。 >>> >>> Windows の API、kernel32 の MultiByteToWideChar や、Mlang.dll の >>> ConvertINetString、.NET Framework の Encoding は"Shift_JIS" を >>> 与えると Windows-31J として、"EUC-JP" を与えると CP51932 として解釈します。 >>> >>> なので、これらの API を使う XML パーサを送信する時は、Ruby 側では >>> XML 宣言で用いるエンコーディングと、変換で用いるエンコーディングを >>> 変える必要があります。 >> >> .NET FrameworkのXMLパーサ以外は困らないのでしょうか? >> REXMLは.NET Frameworkの実装に合わせるよりはXMLの仕様に合わせ >> るべきだと思っています。 >> (XMLパーサじゃなくてSGMLパーサとかならどっちでもいいや、と >> 思いますが。) > > .NET Framework だけでなく、Win32API や IE の MLang を使っている XML パーサです。 > Web 系は MS 実装にあわせているので、Gecko や WebKit もそうですかね。 > > また、常に変えるわけではなく「変えられるようにする」なので、 > MS の実装にあわせるわけでもありません。 > >>> この辺と先の XML 宣言で用いるエンコーディング名を複合的に踏んじゃったのが、 >>> 例えばJava などから Windows 向けの XML をどうやって書き出すか、というお話です。 >>> http://www.artonx.org/diary/20050614.html >>> http://d.hatena.ne.jp/Kazzz/20050614/p1 >> >> 「Javaと.NETのXMLパーサの挙動の違いではまらないようにするに >> はUTF-8を使おうね」ということのように読めました。 > > UTF-8 でいいじゃんという割り切り路線だと、当初のわたしの > 「他のエンコーディングのために互換性を壊すべきではないので revert すべき」 > と主張に帰着するかと思います。 > > -- > NARUSE, Yui >