高橋征義です。

matz / ruby-lang.org (Yukihiro Matsumoto)さん:
> In message "[ruby-list:35163] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。"
>     on 02/05/16, Kouhei Sutou (須藤功平) <kou / cneti.net> writes:
> 
> |>   * REXMLは日本語処理に問題がある
> |>     Uconv,Iconvを必要とすること以上に?

XMLのparserでUnicode以外のencodingをサポートする場合の、
一般的な問題点を2点ほど挙げてみます。

* (数値)文字参照の展開

    XMLでは、「&#x9AD8;」といった文字参照は、Unicodeのコードポイントを
    指定することになっています。UTF-8に決め打ちであれば特に問題ない
    のですが、Shift_JISやEUC-JPのような、Unicodeベースではないencoding
    に変換する場合、
     * 変換表が必要
     * そのencodingで表現できない文字が来た場合、悩ましい
    といった問題が生じます。

    もちろん文字参照を展開しないことにすればいいんですが、
    XML的には「文字参照」とその「参照される文字」は等価で、
    暗黙に変換されることが期待されやすいように思います。

    REXMLでは、UTF-8では日本語も正しく変換されるようです
    (DOMっぽいAPIの方では)。

* 文字クラスのチェック

   規格に適合するXML処理系は、タグなどに使える文字に制限が
   かけてあります。その制限は、Unicodeのコードポイントの表で
   与えられていて、許されていない文字が使用されている場合は
   処理を中止しなければなりません(must)。厳密にやるのはめんど
   くさいです。

   ただし、現状REXMLではこの辺の処理は非常にゆるくなっていて、
   本来ならエラーにしなければならないものも通します(汗;
   逆に、正しいものを蹴ることはなさそうですけど(要確認)。

> |私は、Uconv or Iconvを使えば日本語処理は問題ないと思います。
> 
> なるほど。でも、個人的には「変換せずに済むものは変換したくな
> い」というポリシーを持っているので、ほんとは変換が必須なのは
> 嫌なんですけどね。

XMLはUnicodeべったりなので仕方ないんじゃないでしょうか。なんせ
文法の規定の中にUnicodeのコードポイントがへーきで書かれている
ような規格ですから。

高橋征義 (TAKAHASHI Masayoshi)       Email:maki / inac.co.jp