2013-02-16 45 views
2

这里是我的Ruby脚本:无效字符从其他客户端调用返回

#!/usr/bin/env ruby 
# -*- encoding : utf-8 -*- 

(...) 

begin 
    response = RestClient.post props['server']['host'] + post_to + "?auth=" + props['server']['auth'], 
      model_name => o, :content_type => :json, :accept => :json 
rescue => e 
    response = e.response 
end 

if response.code != 201 
    puts "Erro ao salvar #{model_name} #{o[descriptor]}: " + response.to_str 
end 

这是相当不错的了,但是,当我的模型有一些无效的字段,我在response.to_str返回消息应该是:

"{"kind":["S\u00f3 \u00e9 permitido uma matriz por dom\u00ednio."]}" 

我已经检查:

"{"kind":["Só é permitido uma matriz por domínio."]}" 

作为被印刷,返回的字符集确实是utf-8

如果我尝试:

if response.code != 201 
    puts "{\"kind\":[\"S\u00f3 \u00e9 permitido uma matriz por dom\u00ednio.\"]}" 
    puts "{\"kind\":[\"Só é permitido uma matriz por domínio.\"]}" 
    puts response.to_str 
end 

第一和第二输出被正确地打印,但第三个不是。为什么!?

我使用Ubuntu并从gnome终端调用此脚本。

+1

看起来这不是一个红宝石问题。您的REST服务可能会使用双斜线或类似的方式编码UTF。 Woukld你用有点'Firebug'来检查纯REST-答案? – mudasobwa 2013-02-16 05:22:37

回答

1

谢谢你,mudasobwa,你的提示帮我解决了这个问题。

问题是,我从服务器接收一个JSON对象:

"kind":["Só é permitido uma matriz por domínio."] 

,只是打印出来似乎不是正确的做法。我认为这是因为我的Ruby代码将这个JSON解析为一个Array并将其打印出来。如果我这样做:

require 'mysql2' 
require 'yaml' 
require 'rest_client' 
require 'json' 

# (...) 

if response.code != 201 
    obj = JSON.parse(response.to_str) 
    puts "Erro ao salvar #{model_name} #{o[descriptor]}: " + obj.to_s 
end 

问题得到解决。

相关问题