原因:
大概意思是:emoji表情是5位字符 而to_json/as_json最多支持4个字符,导致返回的emoji不完整,客户端就不会识别,导致乱码。
解决方法:
在config/initializers文件夹下新建patches.rb 文件:
config/initializers/patches.rb文件内容:
module ActiveSupport::JSON::Encoding
class << self
def escape(string)
if string.respond_to?(:force_encoding)
string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY)
end
json = string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] }
json = %("#{json}")
json.force_encoding(::Encoding::UTF_8) if json.respond_to?(:force_encoding)
json
end
end
end
或者
module ActiveSupport
module JSON
module Encoding
class << self
def escape(string)
::JSON.generate([string])[1..-2]
end
end
end
end
end
参考链接: