Ruby Parsing: ошибка при попытке поместить символы кириллицы в URL-запрос

Я написал бота для Telegram, где пользователи могут получать изображения по своим запросам. Но была одна проблема, которую я не мог решить.

Некоторый пример с разбором на 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 должен быть только в формате ascii "https://api.site.com/search/photos?query=вава&per_page =10&client_id=42324d2lkedi234fs342dfse2c038fdfsdfs" (URI::InvalidURIError)

Я использовал Encoding с utf-8 и win-1252, но ничего не помогло. Как это исправить?


person Stanislav Rudnichenko    schedule 17.09.2017    source источник


Ответы (2)


Вы должны закодировать свою кириллицу:

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

Итак, используйте его так (или закодируйте весь URL):

URI.encode(message.text)
person unkmas    schedule 18.09.2017

Попробуйте с

"anything".parameterize.underscore.humanize.downcase
person sparkle    schedule 13.03.2019