Наше приложение Rails 3 должно иметь возможность принимать иностранные символы, такие как ä и こ, и сохранять их в нашей базе данных MySQL, у которой свой набор символов_tf8.
Одна из наших моделей запускает проверку, которая используется для удаления всех несловарных символов в ее имени перед сохранением. В Ruby 1.8.7 и Rails 2 было достаточно следующего:
def strip_non_words(string)
string.gsub!(/\W/,'')
end
Это убрало плохих персонажей, но сохранило такие вещи, как 'ä', 'こ' и '3.' Однако в новых кодировках Ruby 1.9 это утверждение больше не работает - теперь оно удаляет те символы, а также другие, которые нам не нужны. Я пытаюсь найти способ сделать это.
Изменение gsub на что-то вроде этого:
def strip_non_words(string)
string.gsub!(/[[:punct]]/,'')
end
позволяет строке пройти нормально, но затем база данных выдает следующую ошибку:
Mysql2::Error: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation
Запуск строки через Iconv, чтобы попытаться преобразовать ее, вот так:
def strip_non_words(string)
Iconv.conv('LATIN1', 'UTF8', string)
string.gsub!(/[[:punct]]/,'')
end
Результат this error:
Iconv::IllegalSequence: "こäè" # "こäè" being a test string
Я в основном здесь, на коне. Кто-нибудь знает способ сделать то, что мне нужно?