为什么包括?对于 Ruby return 错误?

Why does include? for Ruby return false?

我有以下来自 byebug 会话的 Ruby 片段:

(byebug) target_name
"foo/"
(byebug) target_name.class
String
(byebug) target_name.include?('/')
false
(byebug) "foo/".include?('/')
true

为什么 include? 方法 return false 因为 /foo/ 的一部分?

Ruby版本:

ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]

可能 target_string 包含一些非 ascii 字符。

例如比较:

irb(main):019:0>> str = "foo/"
=> "foo/"
irb(main):020:0> str.ascii_only?
=> true
irb(main):021:0> str.include?("/")
=> true

irb(main):022:0> str = "foo\xe2\x88\x95"
=> "foo∕"
irb(main):023:0> str.ascii_only?
=> false
irb(main):024:0> str.include?("/")
=> false

在后一个示例中,字符串包含编码为 utf-8 字节的“正斜杠”U+2215 字符。

根据您的具体用例,您可以例如将字符串转换为 ascii 并盲目地用 /.

替换任何未定义或无效的字符
str.encode("ascii", "utf-8", replace: "/")

查看 #encode 方法以获得更多选项。