Ошибка в Ruby JSON lib при обработке 4-байтовых эмодзи Unicode? - PullRequest
4 голосов
/ 15 октября 2011

"\ 360 \ 237 \ 230 \ 204" - это стандартный значок Emoji (U + 1f604)

Когда я пытаюсь отправить этот символ в конечную точку сервера, которая говорит в формате JSON, ответ искажен.Вот почему:

>> JSON({:a => "\360\237\230\204"}.to_json)
=> {"a"=>"\357\230\204"}

Как видите, первая часть строки была изменена библиотекой JSON.

Это известная ошибка, и есть ли обходной путь?Или это как-то задумано, поскольку возвращаемое значение в шестнадцатеричном формате - это f604 вместо 1f604?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

Возник конфликт между ActiveRecord и стандартным методом JSON to_json.В реализации ActiveRecord to_json была ошибка.Я решил это с помощью инициализатора, указанного в этой теме:

Как вы справляетесь с конфликтом между ActiveSupport :: JSON и гемом JSON?

0 голосов
/ 13 сентября 2018

попробуйте использовать Oj:

Oj.dump(data, mode: :compat)

Вам нужно будет добавить oj в список драгоценных камней

...