2

ruby の C-Extension を作成しているときに、考えさせられるトラブルに遭遇しました。Ruby (1.9.1) が文字列 (およびすべてのエンコーディング) を内部でどのように処理するのだろうか?

のような文字列があり"o"、その文字列を C 関数 ( as として) に渡すと、 とマクロVALUEを使用して非常に簡単に処理できます。ただし、文字列(ドイツ語のウムラウト文字) を作成すると、.RSTRING_PTR()RSTRING_LEN()öRSTRING_LEN()2

その場合の の内容に少し困惑していRSTRING_PTR()ます。2 バイトは0xA40xC3です。これは何のエンコーディングですか?文字列をC関数に渡す前に、さまざまなエンコーディングで使用"ö".force_encoding( ... )してみましたが、内容にはまったく影響しませんRSTRING_PTR

私が必要としているのは、文字列をC 関数でWCHAR*エンコードされたUTF-16( の場合は"ö")として表す方法0x00F6ですが、どのエンコーディングから来ているのかわからない場合、それはちょっと難しいです。 ..

事前に助けを求めるthx

4

1 に答える 1

2

__ENCODING__ruby 1.9の文字列内部は、定数とEncoding.default_internal設定に依存します。

あなたの場合、UTF-8(デフォルト)のように見えますが、ö実際c3 b6にはUTF-8でありc3 a4ä

于 2012-06-27T11:54:22.003 に答える