ruby拡張中でUTF-8 Stringを生成する
ruby1.9からm17n対応されたStringクラスだけど、何も考えずにruby拡張からrb_str_newするとエンコーディングが未指定の状態になって
String#sizeとかが正しい値を返さなくなる。よって、外部拡張からのString生成時にはバイト列がUTF-8文字列だと明示的にエンコーディングを指定してあげる必要がある。
まずエンコーディング関連のヘッダーをインクルード
#include "ruby/encoding.h"
rb_str_newの代わりにrb_enc_str_newを使う
v_ret_string = rb_enc_str_new(cstr, len, rb_utf8_encoding());