Ruby共享PHP的多字节字符串问题吗?

Does Ruby share PHP's multibyte string problem?

PHP在使用多字节字符串(非ASCII字符)时有很多问题。整个语言的构建假设每个字符都是一个字节。为了解决这个问题,他们发明了mb_字符串函数,您可以使用它来代替标准函数(它工作得很好)。

1
2
strlen($str);
mb_strlen($str); // correct

但是,这确实是一个难题,因为您必须验证您在线下载/查找的代码是否使用这些功能,或者启用mb_string_overload,这可能会破坏一些实际需要char = byte计算的代码。

鲁比也有这个问题吗?


它也有同样的问题。它就在这上面。您可以使用ActiveSupport::Multibyte来支持mb_chars

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> s = "I?t?rnati?nàliz?ti?n"
=>"I?t?rnati?nàliz?ti?n"
>> puts s[0..3]
I?t
=> nil
>> puts s.mb_chars[0..3]
I?t?
=> nil
>> puts s.mb_chars.size
20
=> nil
>> puts s.size
27
=> nil


我认为Ruby1.9消除了这个基础假设


1
2
irb(main):002:0> '?'.length
=> 2