2013-02-16 44 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 

問題得到解決。

相關問題