рендеринг json Encoding :: UndefinedConversionError ("\ xC3" из ASCII-8BIT в UTF-8) - PullRequest
0 голосов
/ 24 июня 2019

Rails 4.1.4 приложению с Ruby 2.3.0

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

render json: { :result => cust_setup }, status: 200

cust_setup - это данные, возвращаемые из базы данных MySQL.Изменение кодировки на UTF8 не помогло.Пробовал несколько разных способов вывести это с тем же результатом.Не уверен, что с этим делать.

Редактировать: Одна вещь, которую я обнаружил во время моих поисков здесь, это то, что мы перешли от mysql2 к драгоценному камню mysql, так как не могли получить драгоценный камень mysql2работать.Драгоценный камень mysql, по-видимому, является виновником изменения вещей в ASCII-8BIT.

Edit 2: В сочетании с вышеизложенным в этой таблице есть 1 поле с испанским языком.Если я уберу это, ошибка исчезнет.Итак, это специальные символы в испанском тексте в сочетании с переходом на самоцвет MySQL.Я не уверен, что мне нужно сделать, чтобы решить эту проблему в данный момент.

Редактировать 3: Я попытался вернуться к гему mysql2, запустил его, все еще выдает ту же ошибку.

Редактировать 4: добавлен геттер в модель для конкретного поля.кодировка работает в модели, если я укажу ее в определенном поле.У меня есть это сейчас:

self[:sp_legal].force_encoding("UTF-8").encode("ASCII-8BIT")

, который выбрасывает эту ошибку

Encoding::InvalidByteSequenceError ("\xF3" followed by "n" on UTF-8):

Редактировать 5: У меня естьэто работает на данный момент.Мне не нравится способ, которым я должен был это делать, он удаляет символы, он не знает, что делать, поэтому не уверен, что получу время от времени, но он работает.вот мой последний получатель

self[:sp_legal].force_encoding("UTF-8").encode("ASCII-8BIT", invalid: :replace, undef: :replace)

1 Ответ

0 голосов
/ 25 июня 2019

Я решил это, Сорта ... см. Ниже (из ОП)

Редактировать 4: добавлен геттер в модель для конкретного поля. кодировка работает в модели, если я укажу ее в определенном поле. у меня есть это сейчас:

самостоятельно [: sp_legal]. .Force_encoding ( "UTF-8") кодирования ( "ASCII-8bit")

который выдает эту ошибку

Encoding :: InvalidByteSequenceError («\ xF3», за которым следует «n» в UTF-8):

Редактировать 5: у меня сейчас работает. Мне не нравится способ, которым я должен был это делать, он удаляет символы, он не знает, что делать, поэтому не уверен, что получу время от времени, но он работает. вот мой последний получатель

self [: sp_legal] .force_encoding ("UTF-8"). Encode ("ASCII-8BIT", недопустимый:: заменить, undef:: заменить)

...