ruby の C-Extension を作成しているときに、考えさせられるトラブルに遭遇しました。Ruby (1.9.1) が文字列 (およびすべてのエンコーディング) を内部でどのように処理するのだろうか?
のような文字列があり"o"
、その文字列を C 関数 ( as として) に渡すと、 とマクロVALUE
を使用して非常に簡単に処理できます。ただし、文字列(ドイツ語のウムラウト文字) を作成すると、.RSTRING_PTR()
RSTRING_LEN()
ö
RSTRING_LEN()
2
その場合の の内容に少し困惑していRSTRING_PTR()
ます。2 バイトは0xA4
と0xC3
です。これは何のエンコーディングですか?文字列をC関数に渡す前に、さまざまなエンコーディングで使用"ö".force_encoding( ... )
してみましたが、内容にはまったく影響しませんRSTRING_PTR
。
私が必要としているのは、文字列をC 関数でWCHAR*
エンコードされたUTF-16
( の場合は"ö"
)として表す方法0x00F6
ですが、どのエンコーディングから来ているのかわからない場合、それはちょっと難しいです。 ..
事前に助けを求めるthx