Ruby 由于不可见字符,无法分析JSON

Ruby 由于不可见字符,无法分析JSON,ruby,json,Ruby,Json,我得到了一个错误与此代码: require 'net/http' require 'rubygems' require 'json' puts "test1:" url = "http://thomas.joulin.eu/a.json" resp = Net::HTTP.get_response(URI.parse(url)) data = resp.body result = JSON.parse(data) puts result puts "test2:" url = "http:/

我得到了一个错误与此代码:

require 'net/http'
require 'rubygems'
require 'json'

puts "test1:"
url = "http://thomas.joulin.eu/a.json"
resp = Net::HTTP.get_response(URI.parse(url))
data = resp.body
result = JSON.parse(data)
puts result

puts "test2:"
url = "http://thomas.joulin.eu/b.json"
resp = Net::HTTP.get_response(URI.parse(url))
data = resp.body
result = JSON.parse(data)
puts result
答复:

test1:
{"k"=>"v"}
test2:
 (JSON::ParserError).0.0/gems/json-1.8.1/lib/json/common.rb:155:in `parse': 757: unexpected token at '{ "k": "v" }
'
    from /Library/Ruby/Gems/2.0.0/gems/json-1.8.1/lib/json/common.rb:155:in `parse'
    from test.rb:16:in `<main>'
cat-eb.json

{ "k": "v" }%  
{ "k": "v" }^M$

问题不在于内容末尾的字符,而在于内容开头的字符:

[82] pry(main)> data
=> "\xEF\xBB\xBF{ \"k\": \"v\" }\r\n"
\xEF\xBB\xBF

这是UTF-8字节顺序掩码()

如果您确定i是纯ASCII,则可以执行以下操作:

 JSON.parse data.encode("ASCII",{:undef=>:replace,:replace=>""})
 => {"k"=>"v"}
另一个选项是替换特定BOM表字符:

 JSON.parse data.encode("UTF-8").gsub!("\xEF\xBB\xBF".force_encoding("UTF-8"), '')
 => {"k"=>"v"}

我希望使用诸如“é”或“ñ”之类的拉丁字符,所以我使用了您的第二个选项,效果很好:
data=resp.body.force_encoding(“UTF-8”)data.gsub!(“\xEF\xBB\xBF”。强制编码(“UTF-8”),”)
谢谢。这也解决了我的问题。