具有UTF-8字符的Ruby concat字符串导致奇怪的排序

时间:2013-06-07 17:37:59

标签: ruby internationalization

1.9.3-p194 :059 >   arabic
 => "أَبْجَدِيَّة عَ" 

1.9.3-p194 :065 > arabic.encoding
=> #<Encoding:UTF-8> 


1.9.3-p194 :068 > "begin #{arabic} end " + " Goodbye "
=> "begin أَبْجَدِيَّة عَ end  Goodbye " 

1.9.3-p194 :067 > "#{arabic} end " + " Goodbye "
=> "end  Goodbye أَبْجَدِيَّة عَ" 

我希望最后一个输出显示为“أبجديةعend Goodbye”。

我必须通过什么字符编码箍才能让ruby忽略阿拉伯语是RTL语言?


更新

我能够在以下红宝石中重现这一点:

ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
jruby 1.7.3 (1.9.3p385) 2013-02-21 dac429b on Java HotSpot(TM) 64-Bit Server VM 1.7.0_15-b03 [linux-amd64]
jruby 1.7.4 (1.9.3p392) 2013-06-07 fffffff on Java HotSpot(TM) 64-Bit Server VM 1.7.0_15-b03 [linux-amd64]

Here is a gist with the code from above

2 个答案:

答案 0 :(得分:1)

这是一个已修复的错误。 Ruby不知道阿拉伯语是RTL语言。无法在2.0.0-p0,1.9.3-p392或我安装的任何其他Ruby上复制它。尝试升级到最新版本的1.9。

答案 1 :(得分:0)

简单的解决方案可能是使用Left-to-right标记,这里是html示例:

"#{arabic_str1}"+" &lrm;"+"#{arabic_str2}"

适合我(1.9.3p392红宝石版)。