Rubyで数値文字参照を文字列に変換

Rubyで数値文字参照を文字列に変換するのってどうやるんだろう・・・と思って調べてみました。

数値文字参照とは

文字参照 - Wikipedia
上記を読んでいただければ分かります。

HTMLなどのSGML文書においては、直接記述できない文字 や記号(マークアップで使われる "<" や "]]" など)を表記する際に用いられる方法である。
XMLにおいては、HTMLにおける「数値文字参照」を文字参照と呼 ぶ。なおHTMLにおける「文字実体参照」は、XMLでは実体参照(Entity reference)と呼び区別する。

文字列と数値文字参照の変換をやってみる

【みんなの知識 ちょっと便利帳】文字列と数値文字参照(文字参照)の変換スクリプト - 機種依存文字文字化け防止でWeb上で変換できます。

文字列 - ♪
10進数数値文字参照 - &#9834;
16進数数値文字参照 - &#x266a;

HTMLで実際に書いてみる

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
<body><br>
&#9834;(10進数による指定)
<br>
&#x266a;(16進数による指定)
<br>

</body>
</html>

ブラウザで見ると以下のように表示されます。

Rubyで数値文字参照の変換をやってみる

htmlentitiesというライブラリがありましたので使ってみます。

% wget http://rubyforge.org/frs/download.php/62613/htmlentities-4.2.0.tar.gz
% tar zxvf htmlentities-4.2.0.tar.gz
% irb
> $LOAD_PATH.unshift('/path/to/htmlentities-4.2.0/lib')
> require 'htmlentities'
=> true
> puts HTMLEntities.new.decode("&#9834;")
♪
=> nil
puts HTMLEntities.new.decode("&#x266a;")
♪
=> nil
puts HTMLEntities.new.decode("&#9834;&#x266a;")
♪♪
=> nil

Rubyの実行環境

OS Mac OS X 10.6.2
ruby ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
gem 1.3.5