несовместимые кодировки символов: UTF-8 и ASCII-8BIT Ruby 1.9 - PullRequest
1 голос
/ 08 сентября 2010

Я только что обновился до ruby ​​1.92, и один из моих патчей обезьян не работает с какой-то ошибкой кодирования.У меня есть следующая функция:

  def strip_noise()
    return if (!self) || (self.size == 0)

    self.delete(160.chr+194.chr).gsub(/[,]/, "").strip
  end

Это теперь дает мне следующую ошибку:

несовместимые кодировки символов: UTF-8 и ASCII-8BIT

Кто-нибудь еще сталкивался с этим?

Ответы [ 4 ]

1 голос
/ 27 января 2013
class String
  def strip_noise
    return if empty? 
    ActiveSupport::Inflector.transliterate self, ''
  end
end

"#{160.chr}#{197.chr} string with noises" # => "\xA0\xC5 string with noises"
"#{160.chr}#{197.chr} string with noises".strip_noise # => "A string with noises"
1 голос
/ 10 сентября 2010

В данный момент это работает для меня:

class String
  def strip_noise()
    return if empty? 
    self.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'')
  end
end

Мне нужно больше тестировать, но я могу прогрессировать.

0 голосов
/ 12 февраля 2011

Не совсем понятно, что вы пытаетесь сделать здесь, но 160.chr+194.chr недопустимо. UTF-8: 160 - это байт продолжения, а 194 - первый байт 2-байтового символа. В обратном порядке они образуют Unicode-символ для «неразрывного пробела».

Если вы хотите удалить все символы, не относящиеся к ASCII-7, попробуйте следующее:

s.delete!("^\u{0000}-\u{007F}")
0 голосов
/ 08 сентября 2010

Это может быть не совсем то, что вы хотите:

  def strip_noise
    return if empty?
    sub = 160.chr.force_encoding(encoding) + 194.chr.force_encoding(encoding)
    delete(sub).gsub(/[,]/, "").strip
  end

Подробнее о теме здесь: http://yehudakatz.com/2010/05/17/encodings-unabridged/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...