【发布时间】:2012-06-27 11:41:32
【问题描述】:
我在为 ruby 创建 C 扩展时遇到了一些麻烦,这让我开始思考。我想知道 Ruby (1.9.1) 如何在内部处理字符串(以及所有编码内容)?
如果我有一个像"o" 这样的字符串,并且我将这个字符串传递给一个C-Function(如VALUE),我可以使用RSTRING_PTR() 和RSTRING_LEN() 宏很容易地处理它。但是,如果我创建字符串ö(德语变音符号),RSTRING_LEN() 将给我2。
在这种情况下,我对RSTRING_PTR() 的内容有点困惑,这两个字节是0xA4 和0xC3。这是什么编码?在将字符串传递给 C 函数之前,我尝试使用具有不同编码的 "ö".force_encoding( ... ),但这根本不会影响 RSTRING_PTR 的内容。
我需要一种在我的 C 函数中将字符串表示为 UTF-16(在 "ö" 的情况下为 0x00F6)中编码的 WCHAR* 的方法,但这有点难如果你不知道你来自什么编码,该怎么办......
感谢您提前提供任何帮助
【问题讨论】:
-
force_encoding不应该改变字符串的内容,它只是改变字符串的读取方式。
标签: c ruby encoding character-encoding ruby-c-extension