どうも、sheepman です。

> これって単に1バイト毎に数値に直しているだけなんじゃないんですか?
> 
> irb(main):001:0> Uconv.euctou8("天気予報").unpack("C*")
> [229, 164, 169, 230, 176, 151, 228, 186, 136, 229, 160, 177]
> 
> UTF-8ならこうなるんじゃないかと。
> 
> irb(main):002:0> Uconv.euctou8("天気予報").unpack("U*")
> [22825, 27671, 20104, 22577]

XMLのデフォルトのエンコーディングが UTF8 といっても、
数値文字参照はUTF8のフォーマットで表現するわけじゃないんですね(^^;

なんとなく分かりかけてきました。

http://www.y-adagio.com/public/standards/xml2/xmlmain.htm#sec-references

『文字参照が "&#x" で始まれば,終端の ; までの数字及び字は,ISO/IEC
 10646の文字コード位置の16進数表現とする。文字が "&#" で始まれば,
終端の ; までの数字は,文字コード位置の10進数表現とする。』

http://www.atmarkit.co.jp/aig/01xml/character.html

『記述する文字コードは、UTF-8やUTF-16の表現ではなく、
ISO/IEC-10646(Unicode)規格書で示されるU+XXXX形式の抽象的な
文字コードを用いる。そのため、文字エンコーディングスキームの
違いによって、表記が変わることはない。』

-- 
sheepman / TAMURA Takashi
sheepman / tcn.zaq.ne.jp http://www.tcn.zaq.ne.jp/sheepman/
Key fingerprint = 4E13 FE38 CD73 48D3 38AE  00EE 9E28 F98B D569 848E