我试图理解为什么这段代码在Ruby 1.9.2中不起作用我也试图弄清楚应该如何改变它以使其工作。这是片段:
ruby-1.9.2-p290 :009 > str = "hello world!"
=> "hello world!"
ruby-1.9.2-p290 :010 > str.gsub("\223","")
RegexpError: invalid multibyte character: /?/
from (irb):10:in `gsub'
答案 0 :(得分:9)
您的ruby处于UTF-8模式,但"\223"
不是有效的UTF-8字符串。当你使用UTF-8时,任何设置了第8位的字节意味着你在一个多字节字符内,你需要继续读取更多的字节来获得完整的字符;这意味着"\223"
只是UTF-8编码字符的部分,因此您的错误。
0223和0224(十进制147和148)是Windows-1252字符集中的“智能”引号,但Windows-1252不是UTF-8。在UTF-8中,您需要"\u201c"
和"\u201d"
作为引号:
>> puts "\u201c"
“
>> puts "\u201d"
”
因此,如果你试图删除引号,那么你可能想要其中一个:
str.gsub("\u201c", "").gsub("\u201d", "")
str.gsub(/[\u201c\u201d]/, '')