Ruby 1.9.2 Кодировка символов: недопустимый многобайтовый символ: /? / - PullRequest
4 голосов
/ 22 ноября 2011

Я пытаюсь понять, почему этот фрагмент кода не работает в 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 Ответ

9 голосов
/ 22 ноября 2011

Ваш рубин находится в режиме UTF-8, но "\223" не является допустимой строкой UTF-8.Когда вы находитесь в UTF-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]/, '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...