" \ X90"从ASCII-8BIT到UTF-8错误导轨

时间:2015-06-12 11:31:47

标签: ruby-on-rails ruby api

我正在Rails应用程序中创建一个API,但我在编码方面遇到了一些麻烦,所以看起来如此。我实际上确实不确定实际的错误是什么。我编写了一个模块,其中包含两个类。其中一个用于获取域的DNS记录。当我通过它实例化类,并调用一个方法它工作得很好,但是当我在我的Rails应用程序中运行它时,我被抛出一个错误说"\x90" from ASCII-8BIT to UTF-8

这有点来自我的课程

#
# Class initializer to set instance variable with domain
#
def initialize(domain)
  @domain = domain
end

#
# Generates hash to be used in other methods
# @returns a hash with usefull info and made ready for later input
#
def generate_hash
  hash = {
    'timestamp' => Time.now.to_i,
    'credits_remaining' => 123,
    'response' => {
      'domain' => @domain,
      'records' => {}
    }
  }
  return hash
end

#
# Get A Records for a domain
# @returns JSON formatted hash
# 
def get_a_records
  data = self.generate_hash
  Resolv::DNS.open do |dns|
    ress = dns.getresources @domain, Resolv::DNS::Resource::IN::A
    p = ress.map { |r| r.address }
    data['response']['records']['a'] = p
  end
  return data.to_json
end

从我的控制器:

require 'domainapi'
class CallsController < ApplicationController

  def index
    render json: {'status': 'OK'}
  end

  def dns
    dns = DomainAPI::Dns.new(params[:domain])
    response = dns.get_a_records
    render json: response
  end

end

我班上的索引方法运行得很好。我像这样http://api.lvh.me:3000/v1/dns/a/stackoverflow.com

查询我的api

lvh.me域名是我使用的,因此我可以在本地使用子域名。 有人可以看到可能出现的错误,或者对我能做什么有建议吗?

更新

我发现尝试不同的域名会引发不同的错误。 google.com抛出: "\xF2" from ASCII-8BIT to UTF-8 facebook.com抛出: "\xAD" from ASCII-8BIT to UTF-8 rubyonrails.org: "\xC0" from ASCII-8BIT to UTF-8

2 个答案:

答案 0 :(得分:0)

它似乎与您从Resolv收到的原始地址的格式有关。你为地址的每个八位字节得到一个字节,所以我认为这也可以修复错误:

p = ress.map { |r| r.address.address.chars.map { |b| b.unpack 'C' }.join '.' }

虽然不确定它是否有帮助。

示例输出:

> Resolv::DNS.open do |dns|
*   ress = dns.getresources 'www.example.com', Resolv::DNS::Resource::IN::A
*   p =  ress.map {|r| r.address.address.chars.map {|b| b.unpack 'C' }.join '.' }
*   data['response']['records']['a'] = p
* end

...

> data.to_json
=> "{\"response\":{\"records\":{\"a\":[\"93.184.216.34\"]}}}"

答案 1 :(得分:-1)

因此,在数小时后试图找出问题所在,我已经想到了这一点。

问题是我尝试将哈希编码为JSON的部分。显然Rails或我的应用程序不理解.to_json方法,因此我必须使用此处所述的JSON.generate(data)序列化:http://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html#module-JSON-label-Generating+JSON