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());