Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 响应POST请求时出现意外的ASCII-8BIT编码_Ruby On Rails_Ruby_Encoding_Utf 8_Nginx - Fatal编程技术网

Ruby on rails 响应POST请求时出现意外的ASCII-8BIT编码

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

我在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 -*-
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>