我正在使用Ruby C API(从Objective C)创建一个Ruby字符串,其中包含芬兰字符。
在Ruby中,我调用了一个gem进行一些操作,它截断了字符串,但是编码的字符被不正确地截断了 - 就像在这个问题中一样: 如何获取Unicode字符串的Ruby子字符串? 一个示例字符串是H pääsee syvemmälle A elämään - 元音字母变成了类似于\30333的字符,但是当被截断时,它会变成\303,这是一个问题。
我不想通过黑客手段解决这个问题,因为我已经测试了直接在Ruby中打开相同的字符串,它可以正常工作。
以下是我将NSString转换为VALUE以在Ruby中使用的方法。
我正在使用 Ruby 1.8.7。 如何解决这个问题最好的方法是什么 - 我可以用 Ruby、C(或 Objective C)来解决,但我不想使用任何具有本地 C 扩展的 Ruby Gems。
在Ruby中,我调用了一个gem进行一些操作,它截断了字符串,但是编码的字符被不正确地截断了 - 就像在这个问题中一样: 如何获取Unicode字符串的Ruby子字符串? 一个示例字符串是H pääsee syvemmälle A elämään - 元音字母变成了类似于\30333的字符,但是当被截断时,它会变成\303,这是一个问题。
我不想通过黑客手段解决这个问题,因为我已经测试了直接在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 Gems。