Ничего себе.Я бью себя по голове сейчас.После нескольких часов попыток решить эту проблему, я, наконец, сам понял это через несколько минут после того, как разместил здесь вопрос.
Решение состоит из трех простых шагов:
ШАГ 1:
Я почти понял это правильно.Я не должен был конвертировать euc-kr в utf-8, а наоборот:
Iconv.iconv('UTF-8', 'euc-kr', info)
ШАГ 2:
Я мог быЯ все еще сталкиваюсь с некоторыми ошибками в тексте, поэтому, чтобы быть в безопасности, я говорю Iconv игнорировать любые ошибки:
Iconv.iconv('UTF-8//IGNORE', 'euc-kr', info)
Наконец, я действительно получаю РЕАЛЬНЫЙ КОРЕЙСКИЙ ТЕКСТ, ура!Проблема в том, что, когда я пытаюсь вставить его в базу данных, он все равно вставляет что-то вроде:
UPDATE `users` SET `info` = '--- \n- \"\\xEC\\xB2\\xA0\\xEC\\xB1\\x8C...' etc...
Даже если оказывается, что у меня правильный текст.Так почему это так?На последнем шаге.
ШАГ 3:
Оказывается, выход Iconv является массивом.Итак, мы объединяем его с join
:
Iconv.iconv('UTF-8//IGNORE', 'euc-kr', info).join
И это на самом деле работает!
Окончательный код:
require 'iconv'
u = User.find(1)
info = u.info
new_info = Iconv.iconv('UTF-8//IGNORE','euc-kr', info).join
u.update_attribute('info', new_info)
Надеюсь, это поможет всем, кто это увидит(и зная себя, вероятно, будущие меня).