新手问题 百度地图 geocoding 调用,怎么使用 utf-8 编码 (发 http get request)?

cqcn1991 · 2013年08月10日 · 最后由 cqcn1991 回复于 2013年08月16日 · 5731 次阅读
address=self.address
  response = HTTParty.get("http://api.map.baidu.com/geocoder/v2/?address=#{address}&output=json&ak=5dfe24c4762c0370324d273bc231f45a")
  decode_response =  ActiveSupport::JSON.decode(response)

address里面是中文,比如“北京” 所以会报错,URI::InvalidURIError (bad URI(is not URI?):

不知道应该怎么写? 我试过address=self.address.force_encoding('utf-8'),但是问题依旧……

我解决的百度地图的编码,你看看有没有帮助 http://ruby-china.org/topics/12650

#1 楼 @kai1248 URI.escape(uri))这样来解决 encoding 的问题?

这是发送的时候 用 nokogiri 的话 doc = Nokogiri::XML(open(URI.escape(uri)), nil, 'utf-8') 后面还是要制定读取的编码

#3 楼 @kai1248 确实是这样。但是我碰到了另外一个问题……

can't convert HTTParty::Response into String

你用的是 nokogiri。我是觉得直接用 httpart 拿到 json 的结果就好了……但是……晕死了

木有问题了,一通乱搞解决了……

额。。我也有直接读的那个代码里。。 解决了就好。

7 楼 已删除
8 楼 已删除

@cqcn1991 你好,我也遇到了同样的问题,请问你是如何解决的呢?谢谢! 我的代码:

require 'open-uri'

def index
  if params[:search].present?       
    url = "http://api.map.baidu.com/geocoder/v2/?address=#{params[:search]}&output=json&ak=AA50c6765a5a346c22348295adca7877"
    content = open(url).read

提示错误: bad URI(is not URI?): http://api.map.baidu.com/geocoder/v2/?address=&output=json&ak=AA50c6765a5a346c22348295adca7877百度大厦

后来找到答案了,需要转码:

url_escape = URI::escape(url) 
content = open(url_escape).read

@long_kl

address=self.address
 uri = "http://api.map.baidu.com/geocoder/v2/?address=#{address}&output=json&ak=5dfe24c4762c0370324d273bc231f45a"
 encoded_uri = URI::encode(uri)
 response = open(encoded_uri).read
 decode_response =  ActiveSupport::JSON.decode(response)
 self.latitude = decode_response['result']['location']['lat']
 self.longitude = decode_response['result']['location']['lng']
需要 登录 后方可回复, 如果你还没有账号请 注册新账号