Ruby on rails 响应POST请求时出现意外的ASCII-8BIT编码
我在rails应用程序中使用了以下API方法:Ruby on rails 响应POST请求时出现意外的ASCII-8BIT编码,ruby-on-rails,ruby,encoding,utf-8,nginx,Ruby On Rails,Ruby,Encoding,Utf 8,Nginx,我在rails应用程序中使用了以下API方法: # -*- encoding : utf-8 -*- def statistics respond_to do |format| format.json { render json: Lead.scope1.scope2, root: false } end end 和标准ActiveModel::Lead模型的序列化程序: # -*- encoding : utf-8 -*- cla
# -*- encoding : utf-8 -*-
def statistics
respond_to do |format|
format.json {
render json: Lead.scope1.scope2, root: false
}
end
end
和标准ActiveModel::Lead模型的序列化程序:
# -*- encoding : utf-8 -*-
class LeadSerializer < ActiveModel::Serializer
attributes :id, :external_id, :external_ip, :fio, :phone, :city, :region, :lead_status, :spl_status, :description, :created_at, :traffic_source, :ad_company, :amount, :product_id
def attributes
data = super
data[:phone] = Digest::SHA256.base64digest(object.phone.to_s).truncate(15)
data
end
end
在我的环境中.rb
。我还在nginx.conf
中指定了默认编码utf-8
当我从生产服务器上的rails控制台调用Lead.scope1.scope2.to_json
时,响应的编码是UTF-8
但由于某些原因,当我尝试使用curb
从ruby脚本调用statistics
方法时,编码是ASCII-8BIT
。这是剧本
# encoding: utf-8
require 'curb'
curl = Curl::Easy.http_post("#{uri}",
Curl::PostField.content( ...**... ),
) do |curl|
curl.ssl_verify_peer = false
curl.ssl_verify_host = false
end
curl.perform
p curl.body.encoding
#=> #<Encoding:ASCII-8BIT>
编码:utf-8
需要“路缘”
curl=curl::Easy.http#u post(#{uri}),
Curl::PostField.content(…**…),
)卷曲|
curl.ssl\u verify\u peer=false
curl.ssl\u verify\u host=false
结束
表演
p.body.encoding
#=> #
我怎样才能解决这个问题 您的
Curl
请求将以web服务器选择使用的任何编码返回响应。如果无法正确确定编码,您可能必须在身体上强制执行正确的编码,但您应该对此进行检查。您的对象的内容可以吗?谢谢,我知道我可以使用force\u编码
,但是如何使web服务器默认为我提供utf-8
编码?我使用的是unicorn。你可能不想强制_编码
,除非你得到的是UTF-8(可能不是,所以你必须转换它)。为了获得UTF-8回复,您必须告诉您的客户机从服务器请求它。从中可以看出,使用easy.encoding=string
,这应该是可能的,也许您可以要求使用easy.encoding
,以查看默认情况下是否允许ASCII-8BIT
,以及如何指定所需的编码。
# encoding: utf-8
require 'curb'
curl = Curl::Easy.http_post("#{uri}",
Curl::PostField.content( ...**... ),
) do |curl|
curl.ssl_verify_peer = false
curl.ssl_verify_host = false
end
curl.perform
p curl.body.encoding
#=> #<Encoding:ASCII-8BIT>