我试图理解为什么这段代码在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'
Run Code Online (Sandbox Code Playgroud)
您的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"
”
Run Code Online (Sandbox Code Playgroud)
因此,如果你试图删除引号,那么你可能想要其中一个:
str.gsub("\u201c", "").gsub("\u201d", "")
str.gsub(/[\u201c\u201d]/, '')
Run Code Online (Sandbox Code Playgroud)