電子書籍の厳選無料作品が豊富!

サロゲートペアの文字コード→文字変換

Windows上でRubyを使って文字コードの書かれたファイルを読み込んで文字を出力しようとしています。
サロゲートペアの文字コードを文字に変換するにはどうしたらいいでしょうか?
たとえば上位サロゲートがa、下位サロゲートがbであるとき、JavaScriptでは次のようにすれば文字が得られるようです。

var s;
s = String.fromCharCode(a,b);
alert(s);

(参考:http://codezine.jp/article/detail/1592

これをRubyでやろうとしていていろいろ調べてみたのですが、探し方が悪いのかわかりません。
どう書けばよいのか教えてください。

なお、WinsowsはXPです。ファイルに出力して正しく出力されているかどうかを確認しています。

よろしくお願いします。

A 回答 (1件)

Ruby1.9以降であれば、文字列リテラルでUnicodeエスケープを使うか、pack して force_encoding すればできます。



例えば U+29E3D のホッケはサロゲートペアで表すと D8 67 + DE 3D なので、
s = "\u{d867}\u{de3d}"
puts s
とすれば出力できます。

あるいは、バイトデータからですと、
a = 0b111011011010000110100111
b = 0b111011011011100010111101
s2 = [a, b].map{|i| [i.to_s(2)].pack("B*").force_encoding("utf-8") }.join
puts s2
です。
この場合はto_s(2)で2進数表現にしているのでB*でpackしてます。

この回答への補足

早速の回答ありがとうございます。
でもすみません、書き忘れていましたがRubyのバージョンは1.8.6なんです。
1.8.6の場合はどのようにすればいいのでしょうか?
ご存じでしたら教えてください。

補足日時:2010/05/27 13:22
    • good
    • 0
この回答へのお礼

Ruby1.9はワンクリック・インストーラーがなくて、前回インストールしようとしてよくわからなかったので躊躇していたのですが、結局Ruby1.9.1を入れたらすんなりうまく行きました。

簡潔で適切なお答え、ありがとうございました。
大変助かりました。

お礼日時:2010/05/27 18:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!