use Test::More; use Encode; use HTTP::Request; use HTTP::Message::PSGI; my @paths = ( 'П', '%D0%9F', decode_utf8('П'), '%D0%9F', 'À', '%C3%80', decode_utf8('À'), '%C3%80', ); while (my($raw, $encoded) = splice @paths, 0, 2) { my $req = HTTP::Request->new(GET => "http://localhost/" . $raw); my $env = $req->to_psgi; is $env->{REQUEST_URI}, "/$encoded"; is $env->{PATH_INFO}, URI::Escape::uri_unescape("/$encoded"); ok !utf8::is_utf8 $env->{PATH_INFO}; ok !utf8::is_utf8 $env->{HTTP_HOST}; } done_testing;