ruby-on-rails – ruby​​ 1.8和1.9之间的字符串长度差异

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – ruby​​ 1.8和1.9之间的字符串长度差异前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个运行在 ruby 1.8.7上的网站.我对传入的帖子进行了验证,检查以确保我们允许最多12000个字符.这些空格被计为字符,并且在帖子经过验证之前剥离了制表符和回车符.

这是经过验证http://pastie.org/5047582的帖子

在ruby 1.9中,字符串长度显示为11909,这是正确的.但是当我检查ruby1.8.7的长度时,结果是12044.

我使用codepad.org运行这个ruby代码,它给了我http://codepad.org/OxgSuKGZ(输出长度为12044,这是错误的)但是当我在codeacademy.org的控制台中运行相同的代码时,字符串长度是11909.

谁能解释我为什么会这样?

谢谢

@H_403_12@

解决方法

这是一个Unicode问题.您使用的字符串包含ASCII范围之外的字符,经常使用的UTF-8编码将这些字符编码为2(或更多)字节.

Ruby 1.8没有正确处理Unicode,而length只是给出了字符串中的字节数,这导致了有趣的东西,如:

"ą".length
=> 2

Ruby 1.9具有更好的Unicode处理能力.这包括返回字符串中实际字符数的长度,只要Ruby知道编码:

"ä".length
=> 1

Ruby 1.8中一种可能的解决方法是使用正则表达式,这可以使Unicode识别:

"ą".scan(/./mu).size
=> 1
@H_403_12@ @H_403_12@

猜你在找的Ruby相关文章