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

时间:2011-11-22 01:03:13

标签: 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'

1 个答案:

答案 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]/, '')