我正在使用 Ruby C API(来自 Objective C)创建一个 Ruby 字符串,它恰好包含芬兰语字符。
一旦在 Ruby 中,我调用一个 gem,它会进行一些操作,截断字符串,但编码的字符会被不正确地截断 - 非常像这个问题:
一个示例字符串是 H pääsee syvemmälle A elämään - 变音符号会变成 \30333 之类的东西,但在截断后会变成 \303,这是一个问题。
我不想破解 gem 来解决这个问题,因为我已经使用直接在 Ruby 中打开的相同字符串进行了测试,并且效果很好。
所以我知道我向 Ruby 传递了一些错误的东西。
以下是我如何将 NSString 转换为 VALUE 以在 Ruby 中使用。
- (VALUE) toRubyValue {
size_t data_length = [self lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
size_t buffer_length = data_length + 1;
char buf[buffer_length];
[self getCString:buf maxLength:buffer_length encoding:NSUTF8StringEncoding];
return rb_str_new(buf, data_length);
}
我在 Ruby 1.8.7
解决这个问题的最佳方法是什么 - 我很高兴在 Ruby 或 C(或 Objective C)中做到这一点,但我宁愿不使用任何具有本机 C 扩展的 Ruby Gem