使用UTF-8字符连接Ruby字符串会导致奇怪的排序

3
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版本中重现这个问题:

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]

这里是上述代码的Gist链接

2个回答

1

这是一个已经修复的bug。Ruby不知道阿拉伯语是一种从右到左的语言。我无法在安装的任何其他Ruby版本中复制它,包括2.0.0-p0和1.9.3-p392。尝试升级到最新的1.9版本。


你能再次尝试使用我发布的Gist吗?我在所有尝试中都没有看到它起作用。谢谢。 - olore
@olor:结果一样。你的系统语言是什么?如果你的系统语言是从右到左(RTL)的,那么这可能可以解释这种行为,因为我的语言是英语。 - Linuxios
我的语言环境设置为'en_US.UTF-8'。我使用的是Centos6.4操作系统。感谢帮助。 - olore
@olore:我还没有给出太多的信息;)。这可能不是Linux的问题,因为我正在使用Linux Mint。 - Linuxios

0
简单的解决方案可以是使用从左到右标记,这里是HTML示例:
"#{arabic_str1}"+" &lrm;"+"#{arabic_str2}"

对我来说运行良好(1.9.3p392 Ruby 版本)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接