Ruby 1.9 еще не поддерживает нормализацию Unicode

Я пытаюсь портировать по некоторым моим старым приложениям для направляющих к Ruby 1.9, и я продолжаю получать предупреждения о том, как "Ruby 1.9 еще не поддерживает нормализацию Unicode". Я разыскал его к этой функции, но я получаю приблизительно 20 предупреждающих сообщений на запрос:

rails-2.3.5/activesupport/lib/active_support/inflector.rb

def transliterate(string)
  warn "Ruby 1.9 doesn't support Unicode normalization yet"
  string.dup
end

Какие-либо идеи, как я должен начать разыскивать их и разрешать его?

13
задан sth 6 February 2010 в 06:43
поделиться

4 ответа

Если вы знаете о последствиях, то есть акцентированные символы не будут транслитерироваться в Ruby 1.9.1 + Rails 2.3.x, поместите это в config / initializers, чтобы отключить предупреждение:

# http://stackoverflow.com/questions/2135247/ruby-1-9-doesnt-support-unicode-normalization-yet
module ActiveSupport
  module Inflector
    # Calling String#parameterize prints a warning under Ruby 1.9,
    # even if the data in the string doesn't need transliterating.
    if Rails.version =~ /^2\.3/
      undef_method :transliterate
      def transliterate(string)
        string.dup
      end
    end
  end
end

Rails 3 действительно решает эту проблему , поэтому более перспективным решением будет переход к этому.

9
ответ дан 1 December 2019 в 23:14
поделиться

семантически, обе версии оператора удаления в C ++ могут «есть» любой указатель; Однако, если указатель на один объект отдается Удалить [] [] , то Ub приведет к тому, что может произойти что-либо, в том числе сбой системы или вообще ничего.

C ++ требует, чтобы программитор выбрал правильную версию оператора удаления в зависимости от объекта DealLocation: массив или один объект.

Если компилятор может автоматически определить, прошел ли указатель к оператору удаления, был указательным массивом, то будет только один оператор удаления в C ++, что было бы только для обоих случаев.

-121--3473195-

Замените тело метода

raise "transliterate called"

и соблюдайте задний корпус, который покажет вам, где на первом вызове. Ваше приложение, конечно, конечно упадет, но, скорее всего, даст вам виновник с первой попытки.

2
ответ дан 1 December 2019 в 23:14
поделиться

Репостинг моего ответа из здесь

некоторое время назад мне пришлось найти местоположение данного IP. Мы получили IP из запроса. Есть бесплатные базы данных, которые дали нам это отображение. В IPv4, когда мы говорим, что IP как «A.B.c.d», по существу A * (256 ^ 3) + B * (256 ^ 2) + C * (256) + D .

http://www.aboutmyip.com/aboutmyxapp/ip2integer.jsp

Итак, когда вы хотите, вы хотите IP-адрес, начиная с «A», вы ищете IPS между * 256 ^ 3 и A * 256 ^ 3 + 256 * (256 ^ 2) (B = 256) + 256 * (256) (C = 256) + 256 (d = 256) (нижний / верхний предел может немного варьироваться в зависимости от того, хотите ли вы включить / исключить пределы).

, которые сказали, что есть конкретные IPS, зарезервированные для конкретных целей (например, 127.0.0.1, что является localhost, 0,0.0.0 не может быть IP и т. Д.).

Итак, ваш запрос LINQ будет

from i in iList where i >= MIN && i <= MAX select i;

, где Ilist - ваш начальный список Min - это ваше значение MIN для вашего диапазона Max - это ваше значение для вашего диапазона

-121--924183-

Этот метод определения завернут в IF-оператор для Ruby 1.9. Прямо над ним вы найдете регулярное определение, которое показывает немного больше того, что делает это. Это метод, используемый для преобразования акцентированных символов в их регулярные варианты. Например: á => A , или ë => E

, но этот метод используется только в параметризе, который в свою очередь прямо выше транслитерировать. Это все еще в ActiveSupport. Я не могу найти ничего, что напрямую называет параметризом.

Так что, возможно, вы используете параметризованные или транслитеры, где-то в приложении Rails?

Общее использование (в соответствии с Параметризованной документацией) предназначена для создания дружественных поправок со стороны произвольных струн, как и, например:

http://stackoverflow.com/questions/2135247/ruby-1-9-doesnt-support-unicode-normalization-yet
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2
ответ дан 1 December 2019 в 23:14
поделиться

Я понимаю, что это грязный способ решить проблему, но прочитав сообщение об ошибке, я знаю о проблеме. Поэтому я хочу избавиться от предупреждений. Я сбросил этот код в environment.rb:

module ActiveSupport
  module Inflector
    # Calling String#parameterize prints a warning under Ruby 1.9,
    # even if the data in the string doesn't need transliterating.
    # Maybe Rails 3 will have fixed it...?
    if RAILS_GEM_VERSION =~ /^2\.3/
      undef_method :transliterate
      def transliterate(string)
        string.dup
      end
    end
  end
end
1
ответ дан 1 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: