Ruby 1.9.2字符编码:无效的多字节字符:/?/

dns*_*son 4 ruby encoding

我试图理解为什么这段代码在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)

mu *_*ort 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"
”
Run Code Online (Sandbox Code Playgroud)

因此,如果你试图删除引号,那么你可能想要其中一个:

str.gsub("\u201c", "").gsub("\u201d", "")
str.gsub(/[\u201c\u201d]/, '')
Run Code Online (Sandbox Code Playgroud)