gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:28:53 24 4
gpt4 key购买 nike

我从 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+/', '')

我如何去掉那个字符串(我在解析网页时得到它)?

最佳答案

字符串 "\302\240" 是 Unicode 代码点 A0 的 UTF-8 编码字符串 (C2 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

关于ruby 不正确的方法行为(可能取决于字符集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com