这是我的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ó é permitido uma matriz por domínio."]}"
打印为:
"{"kind":["S\u00f3 \u00e9 permitido uma matriz por dom\u00ednio."]}"
我已经检查了response.headers
,返回的字符集确实是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终端调用此脚本。
答案 0 :(得分:1)
谢谢你,mudasobwa,你的小费帮助我解决了这个问题。
问题是我从服务器接收JSON对象:
"kind":["Só é permitido uma matriz por domínio."]
只是打印它似乎不是正确的方法。我想这是因为我的Ruby代码将这个JSON解析为一个数组并打印它。如果我这样做:
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
问题得到解决。