ruby - 从 rest-client 调用返回的无效字符

标签 ruby character-encoding

这是我的 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 终端调用此脚本。

最佳答案

谢谢你,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

问题解决了。

关于ruby - 从 rest-client 调用返回的无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905874/

相关文章:

php - 如何验证用户为 mb_*() 函数提供的字符集字符串?

Java 文本编码

html - 将 "unknown-8bit"字符集转换为 UTF-8

ruby - Sinatra session 自动销毁

ruby - 使用 Ruby 2.0 的 Windows 中的 sqlite3_native.rb 在哪里?

arrays - Array#push 导致大数组出现 "stack level too deep"错误

php - json_encode() : Invalid UTF-8 sequence in argument

ruby - 为什么正则表达式适用于 javascript,但不适用于 ruby​​?

ruby-on-rails - 使用 Ruby/Rails 进行 base 64 URL 解码?

json - Elasticsearch 被 CORS 策略阻止取决于查询