У меня были похожие проблемы с маршрутизацией в "/ protégés /: id". Я отправил в список рассылки Rack, но ответ был не велик.
Решение, которое я придумал, не идеально, но оно работает в большинстве случаев. Сначала создайте промежуточное ПО, которое кодирует UTF-8:
# in lib/fix_unicode_urls_middleware.rb:
require 'cgi'
class FixUnicodeUrlsMiddleware
ENVIRONMENT_VARIABLES_TO_FIX = [
'PATH_INFO', 'REQUEST_PATH', 'REQUEST_URI'
]
def initialize(app)
@app = app
end
def call(env)
ENVIRONMENT_VARIABLES_TO_FIX.each do |var|
env[var] = CGI.unescape(env[var]) if env[var] =~ /%[A-Za-z0-9]/
end
@app.call(env)
end
end
Затем используйте это промежуточное ПО в своих config/environment.rb
(Rails 2.3) или config/application.rb
(Rails 3).
Вы также должны убедиться, что вы установили правильный кодовый заголовок HTTP:
Content-type: text/html; charset=utf-8
Вы можете установить это в Rails, в Rack или на вашем веб-сервере, в зависимости от того, сколько разных кодировок вы используете на своем сайте.