2010-01-01 39 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