gpt4 book ai didi

c - ruby 内部是如何表示字符串的?

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:10 26 4
gpt4 key购买 nike

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

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

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

我需要的是一种将字符串表示为 UTF-16 编码的 WCHAR* 的方法(对于 "ö",那将是 0x00F6) 在我的 C 函数中,但如果您不知道您来自什么编码,那将很难做到...

提前感谢任何帮助

最佳答案

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

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

关于c - ruby 内部是如何表示字符串的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11225362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com