module ActionController::ParameterEncoding::ClassMethods

def action_encoding_template(action) # :nodoc:

:nodoc:
def action_encoding_template(action) # :nodoc:
  if @_parameter_encodings.has_key?(action.to_s)
    @_parameter_encodings[action.to_s]
  end
end

def inherited(klass) # :nodoc:

:nodoc:
def inherited(klass) # :nodoc:
  super
  klass.setup_param_encode
end

def param_encoding(action, param, encoding)

but encoding of the data is unknown, like file system data.
This is useful in the case where an application must handle data
but all other arguments will remain UTF-8 encoded.
The file_path parameter on the show action would be encoded as ASCII-8BIT,

end
end
@repositories = Repository.all
def index

end
@repo_name = params[:repo_name]
# params[:repo_name] remains UTF-8 encoded

@repo = Repository.find_by_filesystem_path params[:file_path]
def show

param_encoding :show, :file_path, Encoding::ASCII_8BIT
# This specifies that file_path is not UTF-8 and is instead ASCII_8BIT
class RepositoryController < ActionController::Base

You can specify a binary (ASCII_8BIT) parameter with:

If not specified the default is UTF-8.
Specify the encoding for a parameter on an action.
def param_encoding(action, param, encoding)
  @_parameter_encodings[action.to_s][param.to_s] = encoding
end

def setup_param_encode # :nodoc:

:nodoc:
def setup_param_encode # :nodoc:
  @_parameter_encodings = Hash.new { |h, k| h[k] = {} }
end

def skip_parameter_encoding(action)

must handle data but encoding of the data is unknown, like file system data.
encoded as ASCII-8BIT. This is useful in the case where an application
The show action in the above controller would have all parameter values

end
end
@repositories = Repository.all
def index

end
@repo_name = params[:repo_name].force_encoding 'UTF-8'
# tag it as such
# `repo_name` is guaranteed to be UTF-8, but was ASCII-8BIT, so

@repo = Repository.find_by_filesystem_path params[:file_path]
def show

skip_parameter_encoding :show
class RepositoryController < ActionController::Base

For example, a controller would use it like this:

ASCII-8BIT (it "skips" the encoding default of UTF-8).
Specify that a given action's parameters should all be encoded as
def skip_parameter_encoding(action)
  @_parameter_encodings[action.to_s] = Hash.new { Encoding::ASCII_8BIT }
end