Ruby `encode ': "\xC3" от ASCII-8BIT до UTF-8 (Encoding:: UndefinedConversionError)
Ганнибальные эпизоды в tvdb имеют в них странные символы.
Например:
Œuf
Итак, рубин выплевывает:
./manifesto.rb:19:in `encode': "\xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
from ./manifesto.rb:19:in `to_json'
from ./manifesto.rb:19:in `<main>'
Строка 19:
puts @tree.to_json
Есть ли способ справиться с этими не-utf-символами? Я бы предпочел их не заменить, а преобразовать? Или игнорировать их? Я не знаю, любая помощь была оценена.
Странная часть состоит в том, что script отлично работает через cron. При ручном запуске создается ошибка.
Ответы
Ответ 1
Кажется, вы должны использовать другую кодировку для объекта. Вы должны установить правильную кодовую страницу для переменной @tree
, например, используя ascii-8bit, используя @tree.force_encoding('ISO-8859-1')
. Поскольку ASCII-8BIT
используется только для двоичных файлов.
Чтобы найти текущую внешнюю кодировку для ruby, выполните:
Encoding.default_external
Если sudo решает проблему, проблема заключалась в кодировке по умолчанию (кодировке), поэтому для ее устранения вам необходимо установить правильную кодовую страницу (кодировку) по умолчанию: либо
-
В ruby изменить кодировку на utf-8 или другой правильный, выполните следующие действия:
Encoding.default_external = Encoding::UTF_8
-
В bash, grep
действующая действующая установка:
$ sudo env|grep UTF-8
LC_ALL=ru_RU.UTF-8
LANG=ru_RU.UTF-8
Затем установите их в .bashrc
правильно, аналогично, но не точно с языком ru_RU
, например:
export LC_ALL=ru_RU.UTF-8
export LANG=ru_RU.UTF-8
Ответ 2
Файл .open(yml_file, 'w') должен быть изменен на File.open(yml_file, 'w b)
Ответ 3
Я просто пережил через несколько часов, пытаясь исправить аналогичную проблему. Я проверил свои локали, кодировку базы данных, все, что мог придумать, и все еще получал из базы данных ASCII-8BIT.
Хорошо, оказывается, что если вы храните текст в двоичном поле, он будет автоматически возвращен как кодированный текст ASCII-8BIT, что имеет смысл, однако это может (очевидно) вызвать проблемы в вашем приложении.
Он может быть исправлен путем изменения кодировки столбца на :text
в ваших миграциях.