我正在做一个简单的URL到达,我得到了一些我无法破解的编码。
res_str=Net::HTTP.get(URI.parse("http://suggestqueries.google.com/complete/search?client=youtube&ds=yt&q=s%C3%A1lin"))
我的回答是这样的
window.google.ac.h([“s lin”,[[“s linhansj nsm ns”,0],[“s linhans j nsm nsundir num hrifum“,0],[”s linhansj nsm ns fullkomnar mig“,0”,[“s lin”,0],[“s linhansj nsm ns d ma”,0],[“s linhans j nsm nshj r“,0],[”s linhansj nsm nshvarer draumurinn“,0],[”s linhansj nsm nsoriginal“,0],[”s linhansj ns m nsefeg tti“,0],[”s linhansj nsm nsokkar NTT”,0]],{ “Q”: “A9gr8ZE66_XaaFyUIlaNLEwyxQU”, “K”:1}])
然而,如果我在邮递员中测试我的网址,我会得到我想要的结果
window.google.ac.h([“sálin”,[[“sálinhansjónsmíns”,0],[“sálin汉斯 jónsmínsundirþínumáhrifum“,0],[”sálinhansjónsmínsþúfullkomnar mig“,0],[”sálin“,0],[”sálinhansjónsmínsódóma“,0],[”sálin汉斯 jónsmínshjáþér“,0],[”sálinhansjónsmínshvarer draumurinn“,0],[”sálinhansjónsmínsmininal“,0],[”sálinhansjóns míns的efégætti“,0],[”sálinhansjónsmínsokkar 诺特”,0]],{ “Q”: “ecnVzf6wE6HskDep7UOiRxxu5_4”, “K”:1}])
当我执行我的get in irb:
res_str=Net::HTTP.get(URI.parse("http://suggestqueries.google.com/complete/search?Client=youtube&ds=yt&q=s%C3%A1lin"))
我得到以下内容:
“window.google.ac.h([\”s \ xE1lin \“,[[\”s \ xE1lin hans j \ xF3ns m \ xEDns \“,0],[\”s \ xE1lin hans j \ xF3ns m \ xEDns undir \ xFE \ xEDnum \ xE1hrifum \“,0],[\”s \ xE1lin hans j \ xF3ns m \ xEDns \ xFE \ xFA fullkomnar mig \“,0],[\”s \ xE1lin \“,0],[\”s \ xE1lin hans j \ xF3ns m \ xEDns s \ xF3d \ xF3ma \“,0],[\”s \ xE1lin hans j \ xF3ns m \ xEDns hj \ xE1 \ xFE \ xE9r \“,0],[\”s \ xE1lin hans j \ xF3ns m \ xEDns hvar er draumurinn \“,0],[\”s \ xE1lin hans j \ xF3ns m \ xEDns 原始的“,0”,[\“s \ xE1lin汉斯j \ xF3ns m \ xEDns ef \ xE9g \ xE6tti \“,0],[\”s \ xE1lin hans j \ xF3ns m \ xEDns okkar Ñ\ xF3tt \ “0]],{\ ”Q \“:\ ”zLVSFcDtEbR_JBE4te2_XjMOeRs \“,\ ”K \“:1}])”
执行请求或处理响应以获得真实响应时,我该怎么办?
“window.google.ac.h([\”sálin\“,[[\”sálinhansjónsmíns\“,0],[\”sálinhansjónsmíns等......
答案 0 :(得分:0)
想出这个:)我只需要设置用户代理,以便接收UTF-8编码的结果,就像这样
# escape the query
q=URI::escape(params["q"])
# prepare request
uri = URI.parse("http://clients1.google.com/complete/search?client=youtube&q="<<q)
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
request["User-Agent"] = "Mozilla/5.0"
# make request
response = http.request(request)
# read body
body = response.body
现在我得到了正确的编码结果。但是,我尝试使用render :json => results
将结果作为json返回,并且不幸的是,进入浏览器的结果仍会显示几个。当我想出来的时候,我会对此发表评论:)
修改强> 完成!我正在处理结果并直接从正文中将数据添加到数组中,但我需要做的是强制编码为UTF-8
body = body[body.index('(')..body.index('{')]
body.scan(/"([^"]*)"/).to_a.each { |r| results.push r[0].force_encoding(::Encoding::UTF_8) }
results = results[1..results.length].map {|v| v }
现在我正确地将结果发送到浏览器:)希望这有助于某人。