ruby不正确的方法行为(可能取决于charset)

use*_*254 2 ruby whitespace strip

我从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"
Run Code Online (Sandbox Code Playgroud)

这意味着(对于那些不理解的人)该strip方法根本不会影响这个字符串,与之相同gsub('/\s+/', '')

如何剥离该字符串(我在解析Internet页面时得到了它)?

mol*_*olf 6

该字符串"\302\240"C2 A0Unicode代码点的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}+$/, "")
Run Code Online (Sandbox Code Playgroud)

在Ruby 1.8.7中对Unicode的支持并不是那么好.如果你可以依赖Rails,你可能会成功ActiveSupport::Multibyte.这具有strip免费获得工作方法的优点.安装ActiveSupport,gem install 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
Run Code Online (Sandbox Code Playgroud)