ruby如何在内部表示字符串?

时间:2012-06-27 11:41:33

标签: c ruby encoding character-encoding ruby-c-extension

我在创建一个让我思考的r​​uby的C-Extension时遇到了一些麻烦。我想知道Ruby(1.9.1)如何在内部处理字符串(以及所有编码内容)?

如果我有一个像"o"这样的字符串,并且我将字符串传递给C函数(作为VALUE),我可以使用RSTRING_PTR()RSTRING_LEN()轻松处理它ö宏。但是,如果我创建字符串RSTRING_LEN()(德语变音符号),2会给我RSTRING_PTR()

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

我需要的是一种方法,将UTF-16中编码的字符串表示为"ö"(在0x00F6的情况下,即{{1}}) C函数,但如果你不知道你来自哪个编码,这很难做到......

提前获得任何帮助

1 个答案:

答案 0 :(得分:2)

ruby​​ 1.9中的字符串内部结构取决于__ENCODING__常量和Encoding.default_internal设置。

在您的情况下,它看起来像UTF-8(默认),但ö在UTF-8中实际为c3 b6c3 a4ä