2

我在为 ruby​​ 创建 C-Extension 时遇到了一些麻烦,这让我开始思考。我想知道 Ruby (1.9.1) 如何在内部处理字符串(以及所有编码的东西)?

如果我有一个类似 的字符串"o",并将该字符串传递给一个 C-Function (as ),我可以使用和宏VALUE很容易地处理它。但是,如果我制作字符串(德语变音符号),会给我.RSTRING_PTR()RSTRING_LEN()öRSTRING_LEN()2

在那种情况下,我对 的内容有点困惑RSTRING_PTR(),这两个字节是0xA40xC3。这是什么编码?在将字符串传递给 C 函数之前,我尝试使用"ö".force_encoding( ... )不同的编码,但这根本不影响的内容RSTRING_PTR

我需要的是一种在我的 C 函数中将字符串表示为WCHAR*编码UTF-16(在 的情况下为.."ö"0x00F6

感谢您提前提供任何帮助

4

1 回答 1

2

ruby 1.9 中的字符串内部依赖于__ENCODING__常量和Encoding.default_internal设置。

在您的情况下,它看起来像 UTF-8(默认),但ö实际上c3 b6是 UTF-8,并且c3 a4ä

于 2012-06-27T11:54:22.003 回答