使用 Ruby 的“open-uri”打开 utf-8 URI 时遇到问题

发布于 2024-12-10 21:38:28 字数 1029 浏览 0 评论 0原文

我正在尝试使用 ruby​​ 和 open-uri 从谷歌地图网络服务 API 获取丹麦位置地址。

尝试前往丹麦Ærøhttp://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false&region=dk在 Chrome 中工作不支持 open-uri:

require 'rubygems'
require "open-uri"
require 'json'

uri = "http://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false&region=dk"
response = open(uri)
array = JSON.parse(response)
pp array

这里它产生

/usr/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is not URI?): http://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false&region=dk (URI::InvalidURIError)

另一种方法似乎是转义字符:

uri = "http://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false&region=dk"
uri_escaped = URI.escape(uri)
response = open(uri_escaped)
array = JSON.parse(response.read)
pp array

但这会产生转义结果(不受欢迎:-)

任何人都知道什么可以解决这个问题(获得未转义的反馈或发送 utf-8 请求)?

这里的Ruby版本是1.8.7

I'm trying to get Danish location addresses from google maps web services API with ruby and open-uri.

Trying to get Ærø, Denmark: http://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false®ion=dk works in Chrome does not with open-uri:

require 'rubygems'
require "open-uri"
require 'json'

uri = "http://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false®ion=dk"
response = open(uri)
array = JSON.parse(response)
pp array

Here it yields

/usr/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is not URI?): http://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false®ion=dk (URI::InvalidURIError)

Another way of doing it seems to be to escape characters:

uri = "http://maps.googleapis.com/maps/api/geocode/json?address=ærø&sensor=false®ion=dk"
uri_escaped = URI.escape(uri)
response = open(uri_escaped)
array = JSON.parse(response.read)
pp array

But this yields an escaped result (which is not sought after :-)

Anyone have any idea what could solve this problem (getting unescaped feedback or sending an utf-8 request)?

Ruby version here is 1.8.7

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉宸 2024-12-17 21:38:28

想通了:

只需添加

require 'string19'

到第二个示例的顶部即可运行

Figured it out:

Just add

require 'string19'

to the top of the second example and it works

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文