2010-01-01 34 views
1

PHP在多字节字符串(非ASCII字符)方面有很多麻烦。整个语言是假设每个字符都是一个字节。为了解决这个问题,他们发明了可以使用的mb_strings函数,而不是标准函数(可以很好地工作)。Ruby是否共享PHP的多字节字符串问题?

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

然而,这真的是一种痛苦,因为你需要验证您下载/在网上找到的代码使用这些功能或使mb_string_overload然后可能会破坏一些代码,实际上需要char = byte计算。

Ruby会分享这个问题吗?

回答

1

我认为Ruby 1.9的清除了这个垫层假设

+0

怎么会这样?你可以扩展这个想法吗? – Xeoncross 2010-01-01 20:17:43

+0

http://blog.grayproductions.net/articles/ruby_19s_string文档Ruby 1.9中的字符串是如何不同的 – RyanWilcox 2010-01-02 15:05:07

1
irb(main):002:0> 'ÿ'.length 
=> 2 
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