加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:50:09 所属栏目:百科 来源:网络整理
导读:我有一个运行在 ruby 1.8.7上的网站.我对传入的帖子进行了验证,检查以确保我们允许最多12000个字符.这些空格被计为字符,并且在帖子经过验证之前剥离了制表符和回车符. 这是经过验证http://pastie.org/5047582的帖子 在ruby 1.9中,字符串长度显示为11909,这是
我有一个运行在 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.

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

谢谢

解决方法

这是一个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读