Ruby 解析:当我尝试将西里尔符号放入 URL 请求时出错

Ruby Parsing: Error when I trying to put Cyrillic symbols into URL request

我为 Telegram 编写了一个 Bot,用户可以在其中接收他们请求的图像。但是有一个问题,我无法解决。

在 Ruby 上解析的一些示例:

json_object = JSON.parse(open("https://api.site.com/search/photos?query=" + message.text + "&per_page=10&client_id=42324d2lkedi234fs342dfse2c038fdfsdfs").read)

message.text - 用户请求字段

拉丁文字一切正常,但是当我发送西里尔字母(API 也支持西里尔字母)符号时,出现以下错误:

/Users/me/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/uri/rfc3986_parser.rb:21:in `split': URI must be ascii only "https://api.site.com/search/photos?query=\u0432\u0430\u0432\u0430&per_page=10&client_id=42324d2lkedi234fs342dfse2c038fdfsdfs" (URI::InvalidURIError)

我使用了 utf-8 和 win-1252 编码,但没有任何帮助。这应该如何解决?

您应该对您的西里尔字符串进行编码:

URI.encode('http://google.com?1=АБВ') # => "%D0%90%D0%91%D0%92"

所以,像这样使用它(或编码整个 url):

URI.encode(message.text)

试试

"anything".parameterize.underscore.humanize.downcase