我从ruby(在irb中)得到了奇怪的行为:
irb(main):002:0> pp " LS 600"
"\302\240\302\240\302\240\302\240LS 600"
irb(main):003:0> pp " LS 600".strip
"\302\240\302\240\302\240\302\240LS 600"
这意味着(对于那些不理解的人),strip
方法根本不会影响此字符串,与gsub('/\s+/', '')
相同
如何删除该字符串(我在解析Internet页面时得到了它)?
答案 0 :(得分:6)
字符串"\302\240"
是Unicode代码点C2 A0
的UTF-8编码字符串(A0
),表示非中断空格字符。还有许多其他Unicode空格字符。不幸的是,String#strip
方法没有删除这些。
如果您使用Ruby 1.9.2,那么您可以通过以下方式解决此问题:
# Ruby 1.9.2 only.
# Remove any whitespace-like characters from beginning/end.
"\302\240\302\240LS 600".gsub(/^\p{Space}+|\p{Space}+$/, "")
在Ruby 1.8.7中对Unicode的支持并不是那么好。如果你可以依赖Rails的ActiveSupport::Multibyte
,你可能会成功。这样做的好处是可以免费获得有效的strip
方法。使用gem install activesupport
安装ActiveSupport,然后尝试:
# Ruby 1.8.7/1.9.2.
$KCODE = "u"
require "rubygems"
require "active_support/core_ext/string/multibyte"
# Remove any whitespace-like characters from beginning/end.
"\302\240\302\240LS 600".mb_chars.strip.to_s