2012-06-27 27 views
2

我在創建C-Extension for ruby​​時遇到了一些麻煩,這讓我想到了。我想知道Ruby(1.9.1)如何在內部處理字符串(以及所有編碼內容)?ruby​​如何在內部表示字符串?

如果我有一個像"o"一個字符串,我把這個字符串的C函數(如VALUE),我可以對付它很容易地使用RSTRING_PTR()RSTRING_LEN()宏。但是,如果我使字符串ö(德語變音符字符),RSTRING_LEN()會給我2

在這種情況下,我有點難以忍受RSTRING_PTR()的內容,這兩個字節是0xA40xC3。這是什麼編碼?在將字符串傳遞給C函數之前,我嘗試使用"ö".force_encoding(...)以及不同的編碼,但這根本不會影響RSTRING_PTR的內容。

我需要的是一種方法,有表示爲UTF-16編碼的WCHAR*字符串(在"ö"的情況下,這將是0x00F6)在我的C函數,但是這有點難以做,如果你不知道你從...

THX將在什麼編碼的任何幫助提前紅寶石1.9

+0

'force_encoding'是不應該改變字符串的內容,它只是改變了字符串的讀取方式。 – Cubic

回答

2

字符串內部取決於__ENCODING__常數和Encoding.default_internal設置。

在你的情況下,它看起來像UTF-8(默認),但實際上öc3 b6在UTF-8和c3 a4ä

+0

哦,是的,你是對的我混淆了我的測試用例。 Thx的幫助,現在轉換工作=) – DeX3