我在創建C-Extension for ruby時遇到了一些麻煩,這讓我想到了。我想知道Ruby(1.9.1)如何在內部處理字符串(以及所有編碼內容)?ruby如何在內部表示字符串?
如果我有一個像"o"
一個字符串,我把這個字符串的C函數(如VALUE
),我可以對付它很容易地使用RSTRING_PTR()
和RSTRING_LEN()
宏。但是,如果我使字符串ö
(德語變音符字符),RSTRING_LEN()
會給我2
。
在這種情況下,我有點難以忍受RSTRING_PTR()
的內容,這兩個字節是0xA4
和0xC3
。這是什麼編碼?在將字符串傳遞給C函數之前,我嘗試使用"ö".force_encoding(...)
以及不同的編碼,但這根本不會影響RSTRING_PTR
的內容。
我需要的是一種方法,有表示爲UTF-16
編碼的WCHAR*
字符串(在"ö"
的情況下,這將是0x00F6
)在我的C函數,但是這有點難以做,如果你不知道你從...
THX將在什麼編碼的任何幫助提前紅寶石1.9
'force_encoding'是不應該改變字符串的內容,它只是改變了字符串的讀取方式。 – Cubic