PHP在多字节字符串(非ASCII字符)方面遇到很多麻烦。假设每个字符都是一个字节,构建整个语言。为了解决这个问题,他们发明了mb_strings函数,您可以使用这些函数代替标准函数(可以正常工作)。
strlen($str);
mb_strlen($str); // correct
然而,这确实很痛苦,因为您必须验证您在线下载/查找的代码是使用这些函数还是启用mb_string_overload
,然后可能会破坏一些实际需要char = byte
计算的代码。
Ruby会分享这个问题吗?
答案 0 :(得分:5)
它分享了这个问题。这里有SO。您可以ActiveSupport::Multibyte
使用mb_chars
支持。
>> s = "Iñtërnâtiônàlizætiøn"
=> "Iñtërnâtiô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
答案 1 :(得分:1)
irb(main):002:0> 'ÿ'.length
=> 2
答案 2 :(得分:1)
我认为Ruby 1.9清除了这个底层假设