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ó é 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

最初と 2 番目の出力は正しく印刷されますが、3 番目の出力は正しくありません。どうして!?

私はUbuntuを使用しており、gnome端末からこのスクリプトを呼び出しています。

4

1 に答える 1

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

問題は解決されます。

于 2013-02-16T13:09:24.243 に答える